Spring Boot----缓存
Posted yanxiaoge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot----缓存相关的知识,希望对你有一定的参考价值。
一、JSR107(复杂性较高)
Java Caching定义了5个核心接口,分别是CachingProvider,ICacheManager,Cache,Entry和Expiry。
·CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。
·CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。
·Cache是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个CacheManager所拥有。
·Entry是一个存储在Cache中的key-value对。
·Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。
二、Spring缓存抽象
Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用
JCache(JSR-107)注解简化我们开发;
·Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;
·Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache,ConcurrentMapCache等;
·每沟遇用需要缓存能的方法时,Spring会检查检查指定参教的指定的目标方法是否已经被调用过,如集有就直接从缓荐中获取方法调用后的结果,如集没有
调用方法并缓存结果后返回给用户。下次调用直接从缓存中获取。·使用Spring缓存抽象时我们需要关注以下两点;
1、确定方法需要被缓存以及他们的缓存策略
2、从缓存中读取之前缓存存储的数据
1、创建项目
mybaits mysql jdbc web cache
1、搭建环境mybatis(略)
2、使用缓存
为了方便查看sql日志
logging.level.com.zy.springboot10.dao=debug
2,1 开启缓存
@EnableCaching //开启缓存 @MapperScan("com.zy.springboot10.dao") @SpringBootApplication public class Springboot10Application public static void main(String[] args) SpringApplication.run(Springboot10Application.class, args);
2.2service
@Service public class UserService @Autowired public TbuserMapper tbuserMapper; /** *@Cacheable:将方法的运行结果进行缓存;以后再要相同的数据,直接从缓存中获取,不用调用方法; * CacheMlanager管理多个Cache组件的,对缓存的真正CRUD操作在Cache组件中,每一个缓存组件有自己唯一一个名字; * 几个属性: * cacheNames/value:指定缓存组件的名字; * key:缓存数据使用的key;可以用它来指定。默认是使用方法参数的值 1-方法的返回值 * 编写SpEL;#id;参数id的值 #a0 #p0 #root.args[0] * keyGenerator:key的生成器;可以自己指定key的生成器的组件id * key/keyGenerator:二选一使用 * cacheManager:指定缓存管理器;或者cacheResolver指定获取解析器 * condition:指定符合条件的情况下才缓存; * unless:否定缓存;当unless指定的条件为true,方法的返回值就不会被缓存; * 可以获取到结果进行判断unless="#result==null" * sync:是否使用异步模式 */ @Cacheable(cacheNames="tbUser") public Tbuser selectTbUserById(Integer id) Tbuser tbuser = tbuserMapper.selectByPrimaryKey(id); return tbuser;
2.3 测试
@Autowired UserService userService; @Test public void contextLoads() Tbuser tbuser = userService.selectTbUserById(47); //service方法只会执行一次 Tbuser tbuser1 = userService.selectTbUserById(47);
以上是关于Spring Boot----缓存的主要内容,如果未能解决你的问题,请参考以下文章