在网上找了一份比较好的日本人写的memcache教程,花一下午的时间熟悉了一下,记录一下,以后也许会有用。
memcached 是指高性能的分布式缓存服务器,通过缓存数据,减少数据库的访问字数,提高相应速度。
它的几个特点:
1.协议简单
2.基于libevent事件处理
3.内置内存存储方式
4.memcached不相互通信
linux 下memcache安装
安装memcached需要先安装libevent,启动memcached 的方式
bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
-d 创建守护进程
-m 占用内存大小(m)
-u 用户
-l 连接ip
-p 端口号
-c 最大连接数
-P pid创建位置
-vv 用very verbose 模式启动,调试信息和错误直接输出到控制台
客户端支持用perl,php,python,c++等多种方式进行连接
可直接telnet ip地址 端口号进行连接
set foo 0 0 3
bar
即可保存key值为 foo, value 为bar 的键值对
查看php memcached 提供的访问接口,直接通过getMulti 检索多个元素
http://jp1.php.net/manual/zh/book.memcached.php
memcached 内存存储
数据保存在内存中,重启即会消失,内存满后将会基于LRU(最近最少使用)算法进行删除, (-M 禁止使用LRU,满后则出错)
slab allocation机制
按照预先规定的大小,将分配的内存分割为特定长度的块(chunk)
将会根据收到的数据大小,选择适合的slab (特定大小的chunk组)
缺点:无法有效的利用空间
grown factor 调优
在启动时制定参数 -f 2 (default 值为 1.25), 设置不同chunk之间的差异大小
查看memcached 的内部状态 stats
memcached 的删除机制
lazy expiration(惰性) 在get时查看时间戳,检查是否过期
memcached的分布式算法
1. 根据余数计算分散
求key的CRC值,除以memcached机器台数进行分配。缺点:添加或者移除机器时,缓存重组代价较大
2.consistent hashing
求memcached的服务器以及key的hash值,映射到圆上,以抑制key的重新分配 (php库中的libketama已经实现该算法)