99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

2.3 PhalApi 2.x 緩存

2018-07-28 21:24 更新

緩存

這一章,將從簡(jiǎn)單的緩存、再到高速緩存、最后延伸到多級(jí)緩存,逐步進(jìn)行說(shuō)明。

簡(jiǎn)單本地緩存

這里所指的簡(jiǎn)單緩存,主要是存儲(chǔ)在單臺(tái)服務(wù)器上的緩存,例如使用系統(tǒng)文件的文件緩存,PHP語(yǔ)言提供的APCU緩存。因?yàn)閷?shí)現(xiàn)簡(jiǎn)單,且部署方便。但其缺點(diǎn)也是明顯的,如文件I/O讀寫(xiě)導(dǎo)致性能低,不能支持分布式。所以在沒(méi)有集群服務(wù)器下是適用的。

文件緩存

例如,當(dāng)需要使用文件緩存時(shí),先在DI容器中注冊(cè)對(duì)文件緩存到\PhalApi\DI()->cache。

$di->cache = new PhalApi\Cache\FileCache(array('path' => API_ROOT . '/runtime', 'prefix' => 'demo'));

初始化文件緩存時(shí),需要傳入配置數(shù)組,其中path為緩存數(shù)據(jù)的目錄,可選的前綴prefix,用于區(qū)別不同的項(xiàng)目。

然后便可在適當(dāng)?shù)膱?chǎng)景使用緩存。

// 設(shè)置
PhalApi\DI()->cache->set('thisYear', 2015, 600);


// 獲取,輸出:2015
echo PhalApi\DI()->cache->get('thisYear');


// 刪除
PhalApi\DI()->cache->delete('thisYear');

可以看到,在指定的緩存目錄下會(huì)有類(lèi)似以下這樣的緩存文件。

$ tree ./runtime/cache/
./runtime/cache/
└── 483
    └── 11303fe8f96da746aa296d1b0c11d243.dat

APCU緩存

安裝好APCU擴(kuò)展和設(shè)置相關(guān)配置并重啟PHP后,便可開(kāi)始使用APCU緩存。APCU緩存的初始化比較簡(jiǎn)單,只需要簡(jiǎn)單創(chuàng)建實(shí)例即可,不需要任何配置。

$di)->cache = new PhalApi\Cache\APCUCache();

其他使用參考緩存接口,這里不再贅述。

高速集群緩存

這里的高速集群緩存,是指?jìng)浞植际酱鎯?chǔ)能力,并且進(jìn)駐內(nèi)存的緩存機(jī)制。高速集群緩存性能優(yōu)于簡(jiǎn)單緩存,并且能夠存儲(chǔ)的緩存容量更大,通常配置在其他服務(wù)器,即與應(yīng)用服務(wù)器分開(kāi)部署。其缺點(diǎn)是需要安裝相應(yīng)的PHP擴(kuò)展,另外部署緩存服務(wù),例如常見(jiàn)的Memcached、Redis。若需要考慮緩存落地,還要進(jìn)一步配置。

Memcache/Memcached緩存

若需要使用Memcache/Memcached緩存,則需要安裝相應(yīng)的PHP擴(kuò)展。PHP 7中已經(jīng)逐漸不支持Memcache,因此建議盡量使用Memcached擴(kuò)展。

如使用Memcached:

$di->cache = new PhalApi\Cache\MemcachedCache(array('host' => '127.0.0.1', 'port' => 11211, 'prefix' => 'demo_'));

初始化Memcached時(shí),需要傳遞一個(gè)配置數(shù)組,其中host為緩存服務(wù)器,port為緩存端口,prefix為可選的前綴,用于區(qū)別不同的項(xiàng)目。配置前綴,可以防止同一臺(tái)MC服務(wù)器同一端口下key名沖突。對(duì)于緩存的配置,更好的建議是使用配置文件來(lái)統(tǒng)一管理配置。例如調(diào)整成:

$di->cache = new PhalApi\Cache\MemcachedCache(DI()->config->get('sys.mc'));

相應(yīng)的配置,則在./config/sys.php中的mc選項(xiàng)中統(tǒng)一維護(hù)。

完成了Memcached的初始化和注冊(cè)后,便可考緩存接口進(jìn)行使用,這里不再贅述。Memcache的初始化和配置和Memcached一樣。

如何配置多個(gè)Memcache/Memcached實(shí)例?

實(shí)際項(xiàng)目開(kāi)發(fā)中,當(dāng)需要連接多個(gè)Memcache/Memcached實(shí)例,可以在單個(gè)實(shí)例配置基礎(chǔ)上采用以下配置:

$config = array(
    'host'    => '192.168.1.1, 192.168.1.2',  //多個(gè)用英文逗號(hào)分割
    'port'    => '11211, 11212',              //多個(gè)用英文逗號(hào)分割
    'weight'  => '20, 80',                    //(可選)多個(gè)用英文逗號(hào)分割
);


$di->cache = new PhalApi\Cache\MemcachedCache($config);

上面配置了兩個(gè)MC實(shí)例,分別是:

  • 192.168.1.1,端口為11211,權(quán)重為20
  • 192.168.1.2,端口為11212,權(quán)重為80

    其中,權(quán)重是可選的。并且以host域名的數(shù)量為基準(zhǔn),即最終MC實(shí)例數(shù)量以host的個(gè)數(shù)為準(zhǔn)。端口數(shù)量不足時(shí)取默認(rèn)值11211,多出的端口會(huì)被忽略;同樣,權(quán)重?cái)?shù)量不足時(shí)取默認(rèn)值0,多出的權(quán)重會(huì)被忽略。

    如下,是一份稀疏配置:

    $config = array(
    'host'    => '192.168.1.1, 192.168.1.2, 192.168.1.3',
    'port'    => '11210',
    );

    相當(dāng)于:

  • 192.168.1.1,端口為11210,權(quán)重為0(默認(rèn)值)
  • 192.168.1.2,端口為11211(默認(rèn)值),權(quán)重為0(默認(rèn)值)
  • 192.168.1.3,端口為11211(默認(rèn)值),權(quán)重為0(默認(rèn)值)

    請(qǐng)注意,通常不建議在權(quán)重weight使用稀疏配置,即要么全部不配置權(quán)重,要么全部配置權(quán)重,以免部分使用默認(rèn)權(quán)重為0的MC實(shí)例不生效。

Redis緩存

當(dāng)需要使用Redis緩存時(shí),需要先安裝對(duì)應(yīng)的Redis擴(kuò)展。

簡(jiǎn)單的Redis緩存的初始化如下:

$config = array('host' => '127.0.0.1', 'port' => 6379);
$di->cache = new PhalApi\Cache\RedisCache($config);

關(guān)于Redis的配置,更多選項(xiàng)如下。

Redis配置項(xiàng) 是否必須 默認(rèn)值 說(shuō)明
type unix 當(dāng)為unix時(shí)使用socket連接,否則使用http連接
socket type為unix時(shí)必須 無(wú) unix連接方式
host type不為unix時(shí)必須 無(wú) Redis域名
port type不為unix時(shí)必須 6379 Redis端口
timeout 300 連接超時(shí)時(shí)間,單位秒
prefix phalapi: key前綴
auth Redis身份驗(yàn)證
db 0 Redis庫(kù)

擴(kuò)展:添加新的緩存實(shí)現(xiàn)

當(dāng)需要實(shí)現(xiàn)其他緩存機(jī)制時(shí),例如使用COOKIE、SESSION、數(shù)據(jù)庫(kù)等其他方式的緩存,可以先實(shí)現(xiàn)具體的緩存類(lèi),再重新注冊(cè)\PhalApi\DI()->cache即可。

首先,簡(jiǎn)單了解下PhalApi中的緩存接口PhalApi\Cache。

<?php
namespace PhalApi;


interface Cache {
    public function set($key, $value, $expire = 600);
    public function get($key);
    public function delete($key);
}

PhalApi\Cache緩存接口,主要有三個(gè)操作:設(shè)置緩存、獲取緩存、刪除緩存。設(shè)置時(shí),緩存不存在時(shí)添加,緩存存在時(shí)則更新,過(guò)期時(shí)間單位為秒。當(dāng)獲取失敗時(shí),約定返回NULL。

所以,新的緩存實(shí)現(xiàn)類(lèi)應(yīng)按規(guī)約層的接口簽名完成此緩存接口的實(shí)現(xiàn)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)