Spring 的缓存管理器

在 spring 项目中提供了CacheManager接口来定义缓存管理器,这样各个不同的缓存就可以实现它来提供管理器的功能了,在spring-boot-starter-data-redis.jar中自动配置了RedisCacheManager(实现了CacheManager接口),可以通过设置 spring.cache.cache-names 属性在启动时创建其缓存,并且可以使用 spring.cache.redis.* 属性配置缓存默认值。例如,以下配置创建的 cache1cache2 缓存的生存时间为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保存到缓存服务器中。
@CachePutSpring会将该方法的返回值缓存到缓存服务器中。spring不会事先去缓存服务器中查找,而是直接执行方法,然后缓存。
@CacheEvict移除缓存对应key的值
@Caching分组注解,能够同时应用与其它缓存

​上述注解都可以标注在类或者方法上,如果放在类上,表示对所有的方法都有效;如果放在方法上,则只对该方法有效。在大部分情况下或放置在方法上。一般而言,对于查询,我们会考虑使用@Cacheabel,对于插入和修改,考虑使用@CachePut,对于删除操作,我们会考虑使用@CacheEvict。

来自 https://www.cnblogs.com/adan-chiu/p/14981838.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐