PHP與Memcache集羣

       都說Memcached支持集羣,其實Memcached本身是集中式存儲,並不支持分佈式,但各種各樣的Memcache客戶端,實現了對Memcached服務器的分佈式使用和管理。

       在PHP中,使用Memcache擴展實現集羣是非常簡單的,只需要使用addServer方法將Memcached集羣服務添加即可,並不需要引入任何負載均衡或容災軟件,但有一些參數細節需要關注。


Memcache擴展參數

       ini_set("memcache.allow_failover", 1);

       羣集中的服務器出現故障,允許將緩存服務切換到其它正常的服務器上。


       ini_set('memcache.hash_function', 'crc32');

       ini_set('memcache.hash_strategy', 'consistent');

       選擇使用crc32散列HASH算法,一致性HASH算法就是以該HASH算法爲基礎的,因此這兩個參數可以配合設置。


       在擴展memcache-3.0之後的版本,編譯安裝時默認就設置了一致性HASH算法進行分佈式處理,可通過查看phpinfo()中的memcache擴展參數確認。


連接Memcached服務羣

       $mem = new Memcache();    //實例化對象

       $mem->addServer($server, $port, true, 9, 1, 120, true, function($server, $port) {return;});        //添加memcache服務器到集羣中,此處是關鍵,提供了8個參數選項

       

       //TODO

       //logic from here

       $mem->set("key", "value");

       $result = $mem->get("key");

       var_dump($result);


addServer參數詳解

$mem->addServer(string $host, int $port, bool $persistent, int $weight, int $timeout, int $retry_interval, bool $status, callback $failure_callback);

$host : 服務器地址,域名或IP

$port : 端口,默認爲11211

$persistent : 是否使用持久連接

$weight : 控制該服務器被命中的權重

$timeout : 連接超時時間,默認1秒

$retry_interval : 故障服務器重試間隔時間,默認15秒,可以根據實現情況調大

$status : 故障服務器是否允許保持在線狀態,默認爲true,允許

$failure_callback : 發現故障服務器後進行的回調函數,回調函數接收兩個參數,故障服務器的host和port


這樣,PHP對memcache的集羣設置就完成了,根據實際情況,控制好addServer的參數,並且保證memcache擴展使用的是一致性HASH算法(memcache.hash_strategy=consistent),這點很重要,涉及到服務器故障或添加新服務器後,緩存命中率的問題。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章