<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之旅 廣告
                ##1.24.1 論緩存的重要性 在很多情況下,我們都需要緩存。如對重復獲取但變化不大的數據進行緩存以提供服務器的響應能力,又如當需要為數據庫服務器減少QPS時等等。但同時緩存也因為有延時導致數據不能實時更新,或者在需要更新時不能被更新。如在接口調試、單元測試或者預覽時,但這些都可以通過一些技巧來獲得。這里,將從簡單的緩存、再到高速緩存、多級緩存逐步進行說明。 ##1.24.2 簡單緩存 這里所指的簡單緩存,是指文件緩存。因為實現簡單,且部署方便。但其缺點也是明顯的,如文件I/O讀寫導致性能低,不能支持分布式。所以在沒有集群服務器下是適用的。 當需要使用文件緩存時,先對文件緩存進行DI注冊,便可使用。 ```javascript //$ vim ./Public/init.php DI()->cache = new PhalApi_Cache_File(array('path' => API_ROOT . '/Runtime', 'prefix' => 'demo')); // 設置 DI()->cache->set('thisYear', 2015, 600); // 獲取 echo DI()->cache->get('thisYear'); // 刪除 DI()->cache->delete('thisYear'); ``` ##1.24.3 高速緩存 高速緩存通常具備分布式的能力,并能進駐內存,因此性能高。但同樣此優點所帶來的則是需要另外部署緩存擴展,如常見的Memcached、Redis。若需要考慮緩存落地,還要進一點篩選和配置。 如使用Memcached: ```javascript DI()->cache = new PhalApi_Cache_Memcached(array('host' => '127.0.0.1', 'port' => 11211, 'prefix' => 'demo_')); // 設置 DI()->cache->set('thisYear', 2015, 600); // 獲取 echo DI()->cache->get('thisYear'); // 刪除 DI()->cache->delete('thisYear'); ``` 從上面示例代碼注意到,我們使用了前綴配置,以防同一臺MC服務器同一端口下key名沖突。當然,更好是使用配置文件來配置緩存的地址和端口,以及前綴。 ##1.24.4 多級緩存 然而,很多時候,我們需要多級緩存來承載更大的訪問量。以便結合本地低速緩存和分布式高速緩存來獲得更好的用戶體驗和服務器吞吐率。這時,則可以使用多級緩存策略。 在切換到多級緩存時,我們明顯希望原有的代碼調用不需要同步調整便能獲得升級后的多級緩存,并且我們后臺開發人員也希望可以輕便在原有的單點緩存的基礎上進行擴展。所以這就引出了一個有趣的問題:我們該如何組織多級緩存? 作為一個框架,除了考慮上述的原有調用、單點緩存復用外,還需要考慮到多級緩存的組裝。部分框架,一如我最喜歡的Phalcon則是使用了配置的形式來實現。但仍然,我們需要了解其配置的各個格式要求才能更好掌握和使用,這點帶來了學習的成本。因此,PhalApi則是使用了簡單的組合模式來實現。 正如你在源代碼中看到的PhalApi_Cache_Multi類,通過此類的實例可以利用PhalApi_Cache_Multi::addCache()快速添加一個緩存節點,而節點的優先級則按開發同學添加的順序來確定。顯然在添加時,我們應該先添加分布式的高速緩存,再添加本地的低速緩存(希望不會有人先添加文件緩存再添加MC緩存)。而各個節點的初始化,則是我們之前所熟悉的。只是簡單添加即可。 以下是結合文件緩存和MC緩存的多級緩存示例: ```javascript $cache = PhalApi_Cache_Multi(); $mcCache = new PhalApi_Cache_Memcached(array('host' => '127.0.0.1', 'port' => 11211, 'prefix' => 'demo_')); $cache->addCache($mcCache); $fileCache = new PhalApi_Cache_File(array('path' => API_ROOT . '/Runtime', 'prefix' => 'demo')); $cache->addCache($fileCache); DI()->cache = $cache; ``` 然后,就可像之前那樣設置、獲取和刪除緩存,而不需考慮是單點緩存,還是多級緩存: ```javascript // 設置 DI()->cache->set('thisYear', 2015, 600); // 獲取 echo DI()->cache->get('thisYear'); // 刪除 DI()->cache->delete('thisYear'); ``` ##1.24.5 靜態結構圖 對應地,我們可以得出清晰明了的UML靜態結構圖: ![多級緩存靜態結構圖](http://webtools.qiniudn.com/20150411005257_51bddc79686ee2215d9b0f1144d903bf) 結構層次非常簡單,但主要分為三大類:左邊是多級緩存;中間突出的是特殊情況,即:空對象模式下的空緩存;右邊是目前已提供或者后期擴展的具體緩存實現。
                  <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>

                              哎呀哎呀视频在线观看