memcached深度分析(6)

發表于:2015-07-10來源:uml.org.cn作者:火龍果軟件點擊數: 標簽:數據庫
修改 slabs_clsid 函數,讓它直接返回一個定值(比如 1 ): unsigned int slabs_clsid(size_t size) { return 1;} 修改slabs_init函數,去掉循環創建所有classid屬性的部分,直接

  修改 slabs_clsid 函數,讓它直接返回一個定值(比如 1 ):

unsigned int slabs_clsid(size_t size) {
        return 1;
}

  修改slabs_init函數,去掉循環創建所有classid屬性的部分,直接添加slabclass[1]:

slabclass[1].size = 200;                //每chunk200字節
slabclass[1].perslab = 5000;        //1000000/200

  Memcached客戶端

  Memcached是一個服務程序,使用的時候可以根據它的協議,連接到memcached服務器上,發送命令給服務進程,就可以操作上面的數據。為了方便使用,memcached有很多個客戶端程序可以使用,對應于各種語言,有各種語言的客戶端?;贑語言的有libmemcache、APR_Memcache;基于Perl的有Cache::Memcached;另外還有Python、Ruby、Java、C#等語言的支持。PHP的客戶端是最多的,不光有mcache和PECL memcache兩個擴展,還有大把的由PHP編寫的封裝類,下面介紹一下在PHP中使用memcached的方法:

  mcache擴展是基于libmemcache再封裝的。libmemcache一直沒有發布stable版本,目前版本是1.4.0-rc2,可以在這里找到。libmemcache有一個很不好的特性,就是會向stderr寫很多錯誤信息,一般的,作為lib使用的時候,stderr一般都會被定向到其它地方,比如Apache的錯誤日志,而且libmemcache會自殺,可能會導致異常,不過它的性能還是很好的。

  mcache擴展最后更新到1.2.0-beta10,作者大概是離職了,不光停止更新,連網站也打不開了(~_~),只能到其它地方去獲取這個不負責的擴展了。解壓后安裝方法如常:phpize & configure & make & make install,一定要先安裝libmemcache。使用這個擴展很簡單:

<?php
$mc = memcache();    // 創建一個memcache連接對象,注意這里不是用new!
$mc->add_server('localhost', 11211);    // 添加一個服務進程
$mc->add_server('localhost', 11212);    // 添加第二個服務進程
$mc->set('key1', 'Hello');    // 寫入key1 => Hello
$mc->set('key2', 'World', 10);    // 寫入key2 => World,10秒過期
$mc->set('arr1', array('Hello', 'World'));    // 寫入一個數組
$key1 = $mc->get('key1');    // 獲取'key1'的值,賦給$key1
$key2 = $mc->get('key2');    // 獲取'key2'的值,賦給$key2,如果超過10秒,就取不到了
$arr1 = $mc->get('arr1');    // 獲取'arr1'數組
$mc->delete('arr1');    // 刪除'arr1'
$mc->flush_all();    // 刪掉所有數據
$stats = $mc->stats();    // 獲取服務器信息
var_dump($stats);    // 服務器信息是一個數組
?>

  這個擴展的好處是可以很方便地實現分布式存儲和負載均衡,因為它可以添加多個服務地址,數據在保存的時候是會根據hash結果定位到某臺服務器上的,這也是libmemcache的特性。libmemcache支持集中hash方式,包括CRC32、ELF和Perl hash。

  PECL memcache是PECL發布的擴展,目前最新版本是2.1.0,可以在pecl網站得到。memcache擴展的使用方法可以在新一些的PHP手冊中找到,它和mcache很像,真的很像:

<?php
 
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");
 
$version = $memcache->getVersion();
echo "Server's version: ".$version."n";
 
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;
 
$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)n";
 
$get_result = $memcache->get('key');
echo "Data from the cache:n";
 
var_dump($get_result);
 
?>

原文轉自:http://www.uml.org.cn/sjjm/201411134.asp

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97