spring cache 學習——@CachePut 使用詳解


1. 功能說明

  當需要在不影響方法執行的情況下更新緩存時,可以使用 @CachePut,也就是說,被 @CachePut 注解的緩存方法總是會執行,而且會嘗試將結果放入緩存(當然,是否真的會緩存還跟一些注解參數有關,比如:unless 參數)。@CachePut 跟 @Cacheable 有相同的參數屬性(但是沒有 sync 屬性)。@CachePut 更加適合於緩存填充,而不是方法執行流的優化。

  由於與 @Cacheable 的屬性基本相同,所以不再重復示例。這里重點說明一下它們的區別:

    @Cacheable 的邏輯是:查找緩存 - 有就返回 -沒有就執行方法體 - 將結果緩存起來;

    @CachePut 的邏輯是:執行方法體 - 將結果緩存起來;

  所以 @Cacheable 適用於查詢數據的方法,@CachePut 適用於更新數據的方法。

 

  有關 @Cacheable 的使用,請參考:spring cache 學習——@Cacheable 使用詳解

 

2. 下面舉一個例子

  編寫一個查詢方法,使用 @Cacheable :

@Override
    @Cacheable(value = {"menuById"}, key = "#id")
    public Menu findById(String id) {
        Menu menu = this.getById(id);
        if (menu != null){
            System.out.println("menu.name = " + menu.getName());
        }
        return menu;
    }

  再編寫一個更新方法,使用 @CachePut :

@Override
    @CachePut(value = "menuById", key = "#menu.id")
    public Menu ReviseById(Menu menu) {
        this.updateById(menu);
        return menu;
    }

  請求一遍查詢方法,結果在緩存中生成了數據:

    

 

   然后請求一遍更新方法,提交的數據如下:

    

 

   再看看緩存中的數據,已經修改了:

    

 

   這就是 @CachePut 的作用了。

  另外說一下:官方強烈不推薦將 @Cacheable 和 @CachePut 注解到同一個方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM