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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 緩存 這一章,將從簡單的緩存、再到高速緩存、最后延伸到多級緩存,逐步進行說明。 ## 簡單本地緩存 這里所指的簡單緩存,主要是存儲在單臺服務器上的緩存,例如使用系統文件的文件緩存,PHP語言提供的APCU緩存。因為實現簡單,且部署方便。但其缺點也是明顯的,如文件I/O讀寫導致性能低,不能支持分布式。所以在沒有集群服務器下是適用的。 ### 文件緩存 例如,當需要使用文件緩存時,先在DI容器中注冊對文件緩存到```\PhalApi\DI()->cache```。 ```php $di->cache = new PhalApi\Cache\FileCache(array('path' => API_ROOT . '/runtime', 'prefix' => 'demo')); ``` 初始化文件緩存時,需要傳入配置數組,其中path為緩存數據的目錄,可選的前綴prefix,用于區別不同的項目。 然后便可在適當的場景使用緩存。 ```php // 設置 PhalApi\DI()->cache->set('thisYear', 2015, 600); // 獲取,輸出:2015 echo PhalApi\DI()->cache->get('thisYear'); // 刪除 PhalApi\DI()->cache->delete('thisYear'); ``` 可以看到,在指定的緩存目錄下會有類似以下這樣的緩存文件。 ```bash $ tree ./runtime/cache/ ./runtime/cache/ └── 483 └── 11303fe8f96da746aa296d1b0c11d243.dat ``` ### APCU緩存 安裝好APCU擴展和設置相關配置并重啟PHP后,便可開始使用APCU緩存。APCU緩存的初始化比較簡單,只需要簡單創建實例即可,不需要任何配置。 ```php $di)->cache = new PhalApi\Cache\APCUCache(); ``` 其他使用參考緩存接口,這里不再贅述。 ## 高速集群緩存 這里的高速集群緩存,是指備分布式存儲能力,并且進駐內存的緩存機制。高速集群緩存性能優于簡單緩存,并且能夠存儲的緩存容量更大,通常配置在其他服務器,即與應用服務器分開部署。其缺點是需要安裝相應的PHP擴展,另外部署緩存服務,例如常見的Memcached、Redis。若需要考慮緩存落地,還要進一步配置。 ### Memcache/Memcached緩存 若需要使用Memcache/Memcached緩存,則需要安裝相應的PHP擴展。PHP 7中已經逐漸不支持Memcache,因此建議盡量使用Memcached擴展。 如使用Memcached: ```php $di->cache = new PhalApi\Cache\MemcachedCache(array('host' => '127.0.0.1', 'port' => 11211, 'prefix' => 'demo_')); ``` 初始化Memcached時,需要傳遞一個配置數組,其中host為緩存服務器,port為緩存端口,prefix為可選的前綴,用于區別不同的項目。配置前綴,可以防止同一臺MC服務器同一端口下key名沖突。對于緩存的配置,更好的建議是使用配置文件來統一管理配置。例如調整成: ```php $di->cache = new PhalApi\Cache\MemcachedCache(DI()->config->get('sys.mc')); ``` 相應的配置,則在./config/sys.php中的mc選項中統一維護。 完成了Memcached的初始化和注冊后,便可考緩存接口進行使用,這里不再贅述。Memcache的初始化和配置和Memcached一樣。 ### 如何配置多個Memcache/Memcached實例? 實際項目開發中,當需要連接多個Memcache/Memcached實例,可以在單個實例配置基礎上采用以下配置: ```php $config = array( 'host' => '192.168.1.1, 192.168.1.2', //多個用英文逗號分割 'port' => '11211, 11212', //多個用英文逗號分割 'weight' => '20, 80', //(可選)多個用英文逗號分割 ); $di->cache = new PhalApi\Cache\MemcachedCache($config); ``` 上面配置了兩個MC實例,分別是: + 192.168.1.1,端口為11211,權重為20 + 192.168.1.2,端口為11212,權重為80 其中,權重是可選的。并且**以host域名的數量為基準**,即最終MC實例數量以host的個數為準。端口數量不足時取默認值11211,多出的端口會被忽略;同樣,權重數量不足時取默認值0,多出的權重會被忽略。 如下,是一份稀疏配置: ```php $config = array( 'host' => '192.168.1.1, 192.168.1.2, 192.168.1.3', 'port' => '11210', ); ``` 相當于: + 192.168.1.1,端口為11210,權重為0(默認值) + 192.168.1.2,端口為11211(默認值),權重為0(默認值) + 192.168.1.3,端口為11211(默認值),權重為0(默認值) 請注意,通常不建議在權重weight使用稀疏配置,即要么全部不配置權重,要么全部配置權重,以免部分使用默認權重為0的MC實例不生效。 ### Redis緩存 當需要使用Redis緩存時,需要先安裝對應的Redis擴展。 簡單的Redis緩存的初始化如下: ```php $config = array('host' => '127.0.0.1', 'port' => 6379); $di->cache = new PhalApi\Cache\RedisCache($config); ``` 關于Redis的配置,更多選項如下。 Redis配置項|是否必須|默認值|說明 ---|---|---|--- type|否|unix|當為unix時使用socket連接,否則使用http連接 socket|type為unix時必須|無|unix連接方式 host|type不為unix時必須|無|Redis域名 port|type不為unix時必須|6379|Redis端口 timeout|否|300|連接超時時間,單位秒 prefix|否|phalapi:|key前綴 auth|否|空|Redis身份驗證 db|否|0|Redis庫 ## 擴展:添加新的緩存實現 當需要實現其他緩存機制時,例如使用COOKIE、SESSION、數據庫等其他方式的緩存,可以先實現具體的緩存類,再重新注冊```\PhalApi\DI()->cache```即可。 首先,簡單了解下PhalApi中的緩存接口[PhalApi\Cache](https://github.com/phalapi/kernal/blob/master/src/Cache.php)。 ```php <?php namespace PhalApi; interface Cache { public function set($key, $value, $expire = 600); public function get($key); public function delete($key); } ``` 此```PhalApi\Cache```緩存接口,主要有三個操作:設置緩存、獲取緩存、刪除緩存。設置時,緩存不存在時添加,緩存存在時則更新,過期時間單位為秒。當獲取失敗時,約定返回NULL。 所以,新的緩存實現類應按規約層的接口簽名完成此緩存接口的實現。
                  <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>

                              哎呀哎呀视频在线观看