@Cacheable:Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果, 而不需要再次执行该方法(参考链接 https://www.cnblogs.com/fashflying/p/6908028.html )
比如说用在查询方法上,查询出的结果放在缓存中,下次就不用去数据库查询了。
属性:
cacheNames:指定缓存组件的名字
key: 指定缓存的key
condition: 符合条件才缓存(condition="#id>0")
unless: 否定缓存,条件为true就不缓存。可以获取结果进行判断(unless="#result==null")
sysc: 是否使用异步
@CacheEvict:用来标注在需要清除缓存元素的方法或类上的(参考链接 https://www.cnblogs.com/fashflying/p/6908028.html )
比如说用在删除方法上,不但要删除数据库中的数据,也要删除缓存中的数据。
属性:
value: 指定缓存组件
allEntries:所有key
beforeInvocation:在方法之前执行,默认在方法后执行,如果方法出错就不会清除。
@CachePut:与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中。
比如说用在修改方法上,不但要修改数据库中的数据,也要修改缓存中的数据。
@Caching
可以实现较为复杂的业务,如:查询一条数据,先查询缓存,如果没有查询数据库放入数据库。下次就能查询缓存了。
@EnableCaching:开启基于注解的缓存。
@Cacheable(cacheNames = CacheConfiguration.CACHE_NAME_AUCTION_INFO, key = "#auctionId + '_' + #now")
public List<AuctionInfoDO> findTodayByAuctionId(Long auctionId, Date now) {
return auctionInfoRepo.findAllByAuctionIdAndCreateTime(auctionId, now);
}
以上代码#auctionId和#now都是表示参数auctionId和now
cacheNames 代表你cache的名字,key代表你cache缓存中的key。
key可以用spel表达式来写
1.png
springboot有很多缓存配置类,默认simpleCache生效!
操作对象
@Autowired
private RedisTemplate redisTemplate;
操作字符串
@Autowired
private StringRedisTemplate stringRedisTemplate;
stringRedisTemplate.opsForValue()//string
stringRedisTemplate.opsForList()//list
stringRedisTemplate.opsForList()//list
stringRedisTemplate.opsForHash();//hash
stringRedisTemplate.opsForSet();//set
stringRedisTemplate.opsForZSet();//zset
引入redis启动器后,缓存就从默认的缓存换成redis缓存了。
网友评论