SpringCache-Redis 注解驱动 基本例子

一、三个常用注解

  1. @Cacheable
    例子:

    public class QueryVo{
    
    private Long id;
    
    private String storeUser;
    
    private String storeCar;
    ...
    }
    
    @Cacheable(value="myredis",key="'user_' + #vo.storeUser + '_storecar_' + #vo.storeCar")
    public XXXX getXXXX(QueryVo vo) {
       ...
    }

    注解@Cacheable中存在有以下几个元素:
    ①value : 可看做命名空间,表示存储到哪个缓存之下(配置多个缓存时,选择其一进行存储)。

    ----------------------------------spring-redis.xml----------------------------------------
    <!-- spring自己的缓存管理器,这里定义了缓存位置名称 ,即注解中的value -->    
    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">    
        <property name="caches">    
           <set>    
               <!-- 这里可以配置多个redis -->  
               <!-- <bean class="com.cn.util.RedisCache">    
                    <property name="redisTemplate" ref="redisTemplate" />    
                    <property name="name" value="default"/>    
               </bean> -->    
               <bean class="com.***.util.RedisCache">    
                    <property name="redisTemplate" ref="redisTemplate" />    
                    <property name="name" value="myredis"/>    
                    <!-- name名称要在类或方法的注解中使用 -->  
               </bean>  
           </set>    
        </property>    
    </bean>    

    ②key : 表示命名空间下(该缓存下)缓存唯一key值
    上述例子中其生成key值例如:user_tom_storecar_BMW750

    @Cacheable 用于标注需要缓存方法,当执行该方法传入相同参数时,先从缓存中取值,未取到则运行函数,取到直接返回结果,不运行函数。

  2. @CacheEvict
    例子:

     @CacheEvict(value="myredis",key="'user_' + #vo.storeUser + '_storecar_' + #vo.storeCar")
     public XXXX deleteXXXX(QueryVo vo) {
      ...
     }

    @CacheEvict 用于标注需要删除缓存的方法,函数一定会运行,并且运行完成后删除myredis下该key的缓存。
    若该函数运行完需要删除多个缓存,写法:

     @Caching(  
            evict = {
                    @CacheEvict(value="myredis",key="'user_'+#vo.storeUser+'_storecar_all'"),
                    @CacheEvict(value="myredis",key="'user_'+#vo.storeUser+'_storecar_' + #vo.storeCar")
            }
            
    )  
     public XXXX deleteXXXX(QueryVo vo) {
      ...
     }
  3. @CachePut
    例子:

     @CachePut(value="myredis",key="'user_' + #vo.storeUser + '_storecar_' + #vo.storeCar")
     public XXXX modifyXXXX(QueryVo vo) {
      ...
     }

    @CachePut 用于标注需要写入缓存的方法,函数运行前不查询缓存,函数必将执行且将结果以该key写入缓存,如果key已经存在就覆盖掉之前的缓存,可用于后台保存配置时及时刷新缓存。

    原文作者:BacGa
    原文地址: https://segmentfault.com/a/1190000014633718
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞