maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
在Springboot启动类上加上开启缓存注解@EnableCaching
在待缓存的service层方法上加上注解@Cacheable(cacheNames = {"emp"}),如下:
@Cacheable(cacheNames = {"emp"})
public Employee getEmp(Integer id) {
System.out.println("查询" + id + "号员工");
Employee employee = employeeMapper.selectById(id);
return employee;
}
@Cacheable共有以下属性:
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,方法的返回值就不会被缓存,可以获取到结果进行判断
sync:是否使用异步模式
@Cacheable注解详解CacheAutoConfigurationorg.springframework.boot.autoconfigure.cache.GenericCacheConfigurationorg.springframework.boot.autoconfigure.cache.JCacheCacheConfigurationorg.springframework.boot.autoconfigure.cache.EhCacheCacheConfigurationorg.springframework.boot.autoconfigure.cache.HazelcastCacheConfigurationorg.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguratioorg.springframework.boot.autoconfigure.cache.CouchbaseCacheConfigurationorg.springframework.boot.autoconfigure.cache.RedisCacheConfigurationorg.springframework.boot.autoconfigure.cache.CaffeineCacheConfigurationorg.springframework.boot.autoconfigure.cache.SimpleCacheConfigurationorg.springframework.boot.autoconfigure.cache.NoOpCacheConfigurationSimpleCacheConfiguration默认生效CacheManager:ConcurrentMapCacheManagerConcurrentMapCacheManager类型的缓存组件,他的作用将数据保存在ConcurrentMap中? 标注的方法执行之前先来检查缓存中有没有这个数据,默认按照参数的值作为key去查询缓存,如果没有就运行方法并将结果放入缓存,以后再来调用就可以直接使用缓存中的数据
? 核心在于:
? 1.使用CacheManager[ConcurrentMapCacheManager]按照名字得到Cache[ConcurrentMapCache]组件
? 2.key使用keyGenerator生成的,默认是SimpleKeyGenerator
原文:https://www.cnblogs.com/toughtful/p/14315169.html