Springboot 中 Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意點
阿新 • • 發佈:2018-11-27
Springboot 中 Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意點
1、有如下程式碼
// get 方法呼叫了 stockGive 方法,stockGive 方法使用了快取 // 但是每次執行get 方法的時候,快取都沒有生成,也就是快取沒有被建立 public void get(){ stockGive(0L); } @Override @Cacheable(value = CacheConfig.COMMON, key = "'stock/give'+#memberId") public List<Map<String, Object>> stockGive(Long memberId) { // do something }
2、為什麼快取沒有被正常建立
因為@Cacheable 是使用AOP 代理實現的 ,通過建立內部類來代理快取方法,這樣就會導致一個問題,類內部的方法呼叫類內部的快取方法不會走代理,不會走代理,就不能正常建立快取,所以每次都需要去呼叫資料庫。
3、@Cacheable 的一些注意點
1、因為@Cacheable 由AOP 實現,所以,如果該方法被其它註解切入,當快取命中的時候,則其它註解不能正常切入並執行,@Before 也不行,當快取沒有命中的時候,其它註解可以正常工作
2、@Cacheable 方法不能進行內部呼叫,否則快取無法建立