使用spring的缓存,失效的原因总结如下:
1.一个方法A调同一个类里的另一个有缓存注解的方法B,这样是不走缓存的。
因为@Cacheable 是使用AOP 代理实现的 ,通过创建内部类来代理缓存方法,这样就会导致一个问题,类内部的方法调用类内部的缓存方法不会走代理,不会走代理,就不能正常创建缓存,所以每次都需要去调用数据库。
2.使用了weakKeys()
在Debug的时候查看注入的缓存管理器,发现缓存实际上已经注册进了缓存管理器的Map里面,但是当再次调用的时候,并没有命中缓存,查看缓存管理器的配置可以发现,缓存管理器使用了weakKeys()的配置,这就导致了一个问问题,每次key都匹配不上,因为底层使用了==的方式来进行key的匹配,而不是equals,所以,需要移除该配置。