redis @Cacheable/@CacheEvict注意事项
1、一个类中,方法A调用 标志了@Cahcheable的方法B,缓存会失效,好像是Spring AOP动态代理的问题,对内部方法不进行代理,因此如果使用缓存redis注解不要使用this调用 标注了@Cahcheable的本类方法B。
2、@Cacheable方法中发生异常,缓存保存失败
3、一个标志@Cacheable方法,常常会调用其它类中的@Cacheable方法。
例如:article类 方法A,调用comment类 方法B,A(article)->B(comment) 。第一次缓存访问article A()时,会对A , B 方法都缓存。
当B(comment)对应的数据发生改变时,如果是增加一个comment,会移除comment在redis中的所有数据。
当我们再次访问 A()时,会看缓存中是否有该缓存,结果是有的,因为article对应数据未发生改变。但是article对应的comment数据此时已经发生改变了,那么当前访问A()获取的数据只是缓存中的错误数据。
因此:当子表comment数据发生改变时,不仅应该移除 comment在redis中的缓存,还应该移除父表article在redis中的缓存。