首页 > php, 服务器 > 真的了解memcached吗?

真的了解memcached吗?

2011年7月18日 effect 发表评论 阅读评论

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_strategy =consistent
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/

一致性hash: http://baike.baidu.com/view/1588037.htm

分类: php, 服务器 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.