一、三个常用注解
@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 用于标注需要缓存方法,当执行该方法传入相同参数时,先从缓存中取值,未取到则运行函数,取到直接返回结果,不运行函数。
@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) { ... }
@CachePut
例子:@CachePut(value="myredis",key="'user_' + #vo.storeUser + '_storecar_' + #vo.storeCar") public XXXX modifyXXXX(QueryVo vo) { ... }
@CachePut 用于标注需要写入缓存的方法,函数运行前不查询缓存,函数必将执行且将结果以该key写入缓存,如果key已经存在就覆盖掉之前的缓存,可用于后台保存配置时及时刷新缓存。