修改 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有很多个客户端程序可以使用,对应于各种语言,有各种语言的客户端。基于C语言的有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