Spring cache 整合redis
Spring-boot-starter-cache
Application类上@EnableCaching
1.Cacheable
例子:
@Cacheable(value = “models”, key = “#testModel.name”, condition = "#testModel.address != ‘’ ")
public TestModel getFromMem(TestModel testModel) throws InterruptedException {
TimeUnit.SECONDS.sleep(1);
testModel.setName(testModel.getName().toUpperCase());
return testModel;
}
例子里的注解@Cacheable中存在有以下几个元素
value (也可使用 cacheNames) : 可看做命名空间,表示存到哪个缓存里了。
key : 表示命名空间下缓存唯一key,使用Spring Expression Language(简称SpEL,详见参考文献[5])生成。
condition : 表示在哪种情况下才缓存结果(对应的还有unless,哪种情况不缓存),同样使用SpEL
对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素,如果存在就不再执行该方法,而是直接从缓存中获取结果进行返回
2.CacheEvict
例子:
@CacheEvict(value = “models”, allEntries = true)
@Scheduled(fixedDelay = 10000)
public void deleteFromRedis() {
}
@CacheEvict(value = "models", key = "#name")
public void deleteFromRedis(String name) {
}
例子里的注解 @CacheEvict 中存在有以下几个元素
- value (也可使用 cacheNames) : 同Cacheable注解,可看做命名空间。表示删除哪个命名空间中的缓存
- allEntries: 标记是否删除命名空间下所有缓存,默认为false
- key: 同Cacheable注解,代表需要删除的命名空间下唯一的缓存key。
例子中第一段,与 @Scheduled 注解同时使用,每十秒删除命名空间name下所有的缓存。
第二段,调用此方法后删除命名空间models下, key == 参数 的缓存
同样含有unless与condition
3.@Caching注解可以让我们在一个方法或者类上同时指定多个Spring Cache相关的注解。其拥有三个属性:cacheable、put和evict,分别用于指定@Cacheable、@CachePut和@CacheEvict。
@Caching(cacheable = @Cacheable(“users”), evict = { @CacheEvict(“cache2”),
@CacheEvict(value = “cache3”, allEntries = true) })