真的了解memcached吗?
1 什么是memcached?
Memcached 是一个高性能的分布式内存对象缓存系统,基于一个存储键/值对的hashmap,也就是常说的Key-Value。主要特性是分布式和内存存储,所以读写速度是非常神速的,1.5W/s没问题的。
2 memecached启动参数
memcached -d -m 2048 -p 11211 -P /tmp/memcached.pid
-d 守护模式
-m 分配最大的内存单位MB
-p 监听端口
-P 保存pid的文件,只有-d的时候才有效果
其他的参数见memcached -h
结合上面的启动参数,关闭memcached的命令是:kill `cat /tmp/memcached.pid` ,需要注意的是:memcached是存储在内存中,所以kill之后,存储的数据全部没了。
3 服务器状态
使用命令:telnet memcached-server-address port,这样就可以连接上memcached服务器,然后输入stats 即可得到服务器各项状态数据,主要状态说明:
pid 服务器进程id
uptime 服务器运行秒数
time 服务器当前时间锉
version 服务器版本
pointer_size 操作系统指针大小(32位的就是32)
rusage_user 进程累计用户时间
rusage_system 进程累计系统时间
curr_connections 当前打开的连接数
total_connections 系统启动后的连接总数
cmd_get get请求总数
cmd_set set请求总数
cmd_flush flush请求总数
get_hits get请求命中次数
get_misses get未命中次数
delete_misses delete未命中次数
delete_hits delete命中次数
threads 线程数
bytes 存储的item占用的 字节数
curr_items 当前item数目
total_items 系统启动后的总字节数目
evictions 为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
limit_maxbytes 分配的内存大小
bytes_read 读取字节数目
bytes_written 发送字节数目
缓存命中率 = get_hits/cmd_get * 100%
4 php-client
有三种php-client:
1)MemcachedClient.php 使用的是php socket和服务器交互,不推荐 。
2)pecl的memcache扩展 推荐
3) pecl的memcached扩展 基于libmemcached的扩展,相比memcache多了很多方法,而且效率各方面也优于memcache扩展。强烈推荐
5 推荐的分布式方式
memcached服务器本身没有分布式的功能,分布式都是通过客户端根据key值算出对应的服务器节点。比较常规的分布式是求余法,但是这个方法有个致命的硬伤:当要增加或者删减一个服务器节点的时候,当时的缓存命中率大大降低。推荐的方法是一致性hash模式。
如果你使用的是memcache扩展,那么想要使用一致性hash模式,请在php.ini中增加或者修改配置:
Memcache.hash_function =crc32
如果使用的是memcached,那么在代码中使用:
$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
6 参考资料
memcached api文档翻译:http://blog.csdn.net/lgg201/article/details/6002928
memcached 安装方式:http://www.9enjoy.com/php-memcached/