<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                Spring 3.1之后,引入了注解緩存技術,其本質上不是一個具體的緩存實現方案,而是一個對緩存使用的抽象,通過在既有代碼中添加少量自定義的各種annotation,即能夠達到使用緩存對象和緩存方法的返回對象的效果。Spring的緩存技術具備相當的靈活性,不僅能夠使用SpEL(Spring Expression Language)來定義緩存的key和各種condition,還提供開箱即用的緩存臨時存儲方案,也支持和主流的專業緩存集成。其特點總結如下: * 少量的配置annotation注釋即可使得既有代碼支持緩存; * 支持開箱即用,不用安裝和部署額外的第三方組件即可使用緩存; * 支持Spring Express Language(SpEL),能使用對象的任何屬性或者方法來定義緩存的key和使用規則條件; * 支持自定義key和自定義緩存管理者,具有相當的靈活性和可擴展性 和Spring的事務管理類似,Spring Cache的關鍵原理就是Spring AOP,通過Spring AOP實現了在方法調用前、調用后獲取方法的入參和返回值,進而實現了緩存的邏輯。而Spring Cache利用了Spring AOP的動態代理技術,即當客戶端嘗試調用pojo的foo()方法的時候,給它的不是pojo自身的引用,而是一個動態生成的代理類 ![](https://img.kancloud.cn/e1/da/e1da737275fabe6edb702b90ce7d05bb_591x217.png) Spring Cache主要使用三個注釋標簽,即@Cacheable、@CachePut和@CacheEvict,主要針對方法上注解使用,部分場景也可以直接類上注解使用,當在類上使用時,該類所有方法都將受影響 | 標簽類型 | 作用 | 主要配置參數說明 | | --- | --- | --- | | @Cacheable | 主要針對方法配置,能夠根據方法的請求參數對其結果進行緩存 | **value:**緩存的名稱,在 Spring 配置文件中定義,必須指定至少一個;**key:**緩存的 key,可以為空,如果指定要按照 SpEL 表達式編寫,如果不指定,則默認按照方法的所有參數進行組合;**condition:**緩存的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進行緩存 | | @CachePut | 主要針對方法配置,能夠根據方法的請求參數對其結果進行緩存,和 @Cacheable 不同的是,它每次都會觸發真實方法的調用 | **value:**緩存的名稱,在 spring 配置文件中定義,必須指定至少一個;**key:**緩存的 key,可以為空,如果指定要按照 SpEL 表達式編寫,如果不指定,則默認按照方法的所有參數進行組合;**condition:**緩存的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進行緩存 | | @CacheEvict | 主要針對方法配置,能夠根據一定的條件對緩存進行清空 | **value:**緩存的名稱,在 Spring 配置文件中定義,必須指定至少一個;**key:**緩存的 key,可以為空,如果指定要按照 SpEL 表達式編寫,如果不指定,則默認按照方法的所有參數進行組合;**condition:**緩存的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進行緩存;**allEntries:**是否清空所有緩存內容,默認為 false,如果指定為 true,則方法調用后將立即清空所有緩存;**beforeInvocation:**是否在方法執行前就清空,默認為 false,如果指定為 true,則在方法還沒有執行的時候就清空緩存,默認情況下,如果方法執行拋出異常,則不會清空緩存 | ### Spring緩存擴展 這需要簡單的三步驟 1. 首先需要提供一個CacheManager接口的實現(繼承至AbstractCacheManager),管理自身的cache實例; 2. 實現自己的cache實例MyCache(繼承至Cache),在這里面引入我們需要的第三方cache或自定義cache; 3. 最后就是對配置項進行聲明,將MyCache實例注入CacheManager進行統一管理 【參考資料】 [https://tech.meituan.com/2017/03/17/cache-about.html](https://tech.meituan.com/2017/03/17/cache-about.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看