在 spring 项目中提供了CacheManager
接口来定义缓存管理器,这样各个不同的缓存就可以实现它来提供管理器的功能了,在spring-boot-starter-data-redis.jar
中自动配置了RedisCacheManager
(实现了CacheManager
接口),可以通过设置 spring.cache.cache-names
属性在启动时创建其缓存,并且可以使用 spring.cache.redis.*
属性配置缓存默认值。例如,以下配置创建的 cache1
和 cache2
缓存的生存时间为10分钟:
spring.cache.cache-names=cache1,cache2
spring.cache.redis.time-to-live=600000
也可以自己定义 RedisCacheManager
来完全控制配置。如果您要定制序列化策略,这可能很有用
@Configuration
@EnableCaching
public class RedisConfiguration {
@Bean
public CacheManager redisCacheManager(@Autowired RedisConnectionFactory redisConnectionFactory){
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMillis(10)))
.build();
}
}
@EnableCaching表示spring IoC容器启动了缓存机制。
配置了缓存管理器后,Spring就允许用注解的方式使用缓存了。使用的注解有4个
注解 | 描述 |
---|---|
@Cachable | 表明在进入方法之前,Spring会先从缓存服务器中查找对应key的缓存值,如果找到缓存值,那么Spring将不再调用方法,而是将缓存值直接返回给调用者;如果没有找到缓存值,那么spring就会执行方法,将最后的结果通过key保存到缓存服务器中。 |
@CachePut | Spring会将该方法的返回值缓存到缓存服务器中。spring不会事先去缓存服务器中查找,而是直接执行方法,然后缓存。 |
@CacheEvict | 移除缓存对应key的值 |
@Caching | 分组注解,能够同时应用与其它缓存 |
上述注解都可以标注在类或者方法上,如果放在类上,表示对所有的方法都有效;如果放在方法上,则只对该方法有效。在大部分情况下或放置在方法上。一般而言,对于查询,我们会考虑使用@Cacheabel,对于插入和修改,考虑使用@CachePut,对于删除操作,我们会考虑使用@CacheEvict。
来自 https://www.cnblogs.com/adan-chiu/p/14981838.html