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> stockGive(Long memberId) {
// do something
}
2、為什麼緩存沒有被正常建立
因為@Cacheable 是使用AOP 代理實作的 ,通過建立内部類來代理緩存方法,這樣就會導緻一個問題,類内部的方法調用類内部的緩存方法不會走代理,不會走代理,就不能正常建立緩存,是以每次都需要去調用資料庫。