1. 程式人生 > >Springboot 中 Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意點

Springboot 中 Redis快取使用 @Cacheable不生效的原因,以及@Cacheable 的一些注意點

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 方法不能進行內部呼叫,否則快取無法建立