簡體   English   中英

Spring Boot Redis @Cacheable方法未從另一個類調用

[英]Spring boot Redis @Cacheable method not getting called from another class

可能是其他人的問題似乎重復了,但是我已經檢查了其他類似的問題並嘗試了解決方案,但沒有任何效果。

我有一個帶有緩存注釋的Service類,如下所示:

@Service
@CacheConfig(cacheNames={"ReqCache"})
public class ReqCache implements CacheFacade{

    @Autowired
   RequestRepository requestRepo;

    @Cacheable
    public Request getRequest(String sessionId) {
        System.out.println("in cache comp");


        return requestRepo.get(sessionId);
        }

@CachePut(value = "ReqCache", key = "#p0.sessionId")
    public void addRequest(Request request, int partition) {
        requestRepo.add(lterequest,partition);
    }
}

我在另一個服務類中自動裝配CacheFacade。 當我從該類中調用addRequest時,它可以工作,但是當我調用其未被調用的getRequest時,我嘗試在其中添加記錄器和調試點,但流程沒有在那里進行。

這是我的主要服務類,它調用緩存服務類:

@Service
public class RequestHandler {


@Autowired
    CacheFacade cacheFac;
    }

有人可以告訴我我在做什么錯,為什么@cacheput可以工作但是@cacheable方法沒有被調用。

提前致謝

在Springboot中, @Cacheable批注告訴spring緩存這些結果(這通過代理工作,因此,如果您想讀取緩存的結果,則以@Cacheable注釋的方法必須是服務中調用的第一個方法)...假設它不允許您在此處進行調試,因為它正在讀取緩存的結果? 它緩存返回的值,而不是整個函數。

因此,在此示例中,第一次使用“ Jim”調用此方法時,它將打印Jim,執行db查找,並返回5。但是在那之后spring記住“ Jim”已經是該方法的參數,因此再次執行整個方法的過程中,spring知道“ Jim”返回5。它將在清除緩存后再次執行整個方法

@Cacheable
private int method1(String name){
     System.out.println(name);

     //db lookup
     return repo.getId(name);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM