<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Hibernate 4 緩存 > 原文: [https://javabeginnerstutorial.com/hibernate/caching-with-hibernate-4/](https://javabeginnerstutorial.com/hibernate/caching-with-hibernate-4/) 如果您有更大的應用,則應考慮性能以及如何提高性能。 緩存是執行此操作的一種方法,因為它可以減少對數據庫的查詢。 查詢數據庫始終會對性能產生影響,因為它是 I/O 操作。 而且 I/O 操作比僅使用應用內存的操作要慢得多。 緩存在您的應用和數據庫之間起作用,以盡可能避免數據庫命中次數。 ## 實體緩存 默認情況下,Hibernate 使用第一級緩存,這意味著它將通過會話將實體存儲在應用的內存中(為 Hibernate 分配)。 它是所有實體都必須傳遞的強制性緩存。 這有兩個好處:如果經常訪問該實體,則 Hibernate 會記住它;如果您的應用再次需要該實體,則將從會話的緩存中返回它; 第二個好處是,如果您在一個實體上執行多個更新,則 Hibernate 嘗試將這些更新分組在一起,并延遲實際的數據庫調用以減少 I/O 流量。 如果關閉會話,則存儲在第一級緩存中的對象將被銷毀并保存或更新到數據庫。 您可以使用可選的二級緩存來擴展此緩存。 一級始終是強制性的,始終會首先被咨詢。 二級緩存用于跨會話緩存對象。 對于二級緩存,有一些第三方解決方案可以與 Hibernate 一起使用。 Hibernate 提供了`org.hibernate.cache`。 供應器必須實現`CacheProvider`接口,以使 Hibernate 處理緩存。 市場上有一些緩存供應器,但是 Hibernate 希望您為整個應用選擇一個供應器。 讓我提及一些緩存供應器: * 高速緩存 * OS 緩存 * Infinispan 在上面提到的那些之外,EHCache 是??最流行和廣泛使用的。 ### 緩存策略 使用二級緩存時,必須記住一些緩存策略: * **只讀**此策略應用于永遠不會更新的持久對象。 這對于讀取和緩存應用配置以及其他靜態數據非常有用。 這是具有最佳性能的最簡單的策略,因為沒有重載可以檢查是否在數據庫中更新了實體。 * **讀寫**此策略對由應用更新的實體很有用。 但是,如果數據是通過數據庫或其他應用更新的,則 Hibernate 無法判斷是否發生了更改,并且您的數據可能已過時。 * **非受限讀寫**如果應用僅偶爾更新數據并且不需要嚴格的事務隔離,則此緩存策略可能是合適的。 * **事務性**此緩存策略為完全事務性緩存供應器(例如 JBoss TreeCache)提供支持。 這樣的緩存只能在 JTA 環境中使用,并且必須指定`transaction.manager_lookup_class`。 也不奇怪:EHCache 支持上述所有這四種策略,因此是開始使用二級緩存供應器的不錯選擇。 ## 查詢緩存 另外,對于實體,您也可以將查詢存儲在緩存中。 但是,此查詢緩存與二級緩存緊密配合,因此,如果您使用二級緩存,則這只是一種參加的方式。 要使用查詢緩存,還需要兩個額外的緩存區域:一個用于緩存的查詢結果,另一個用于在最后更新表時的時間戳。 僅當您具有經常使用相同參數運行的**查詢**時,才使用查詢緩存。 ## 總結 要對應用性能產生積極影響,第一步是在數據庫和應用之間使用一些緩存。 Hibernate 提供了一個簡單的內存緩存,稱為*一級緩存*,由于它是強制性的,因此您無需啟用或配置它。 但是,您可以使用*二級緩存*擴展此功能,該緩存可跨應用的會話緩存對象。 如果您使用的是二級緩存,則可以通過通常使用相同參數調用的緩存查詢來擴展緩存實體。
                  <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>

                              哎呀哎呀视频在线观看