memcached 启动参数

memcached -m 64 -vv
-d 守护进程
-p 指定端口号 默认 11211
-m 指定最大使用内存大小 默认 64m
-t 线程数 默认4
-l 连接的ip地址 ,默认是本机
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数 默认 1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags 默认是48
-vv 详细信息 还打印客户端命令/响应
-I 重写每个数据页尺寸。调整数据项最大尺寸
-R
通过限制某个连接可以连接提交的命令数,以避免其他连接等待时间过久。某连接提交的命令数一旦达到该阀值,服务器将暂时拒绝其后续的请求,则优先处理其他连接的请求。该限制默认是20,即每个连接可以提交的命令数
-B 绑定协议,ascii,binary,auto (default)

php扩展 memcached memcache

memcached 拥有更多的方法和支持,支持二进制协议,在性能方面更好。 Memcached::setOption
每个chunk size 大小80字节,共有13107个chunk (1024*1024/80=13107)。等于1MB,即1个page
数据存入时,会按照大小分配到不同的chunk中。50字节的数据,会放到 slab class1 中的chunk,浪费30字节

内存分配方式

-m 参数指定预留的内存空间总大小
切分成若干个页(page),默认每页1M,分配给slab class
不同的slab class 中再切割成不同大小的chunk
page被分配到 slab class 后,page就不再移动
每个 slab class 就像一个缓存系统。有自己的lru。

统计命令

stats
进程信息、连接数、请求数、网络流量、LRU
stats slabs
显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats items
显示各个slab中item的数目,及最老item最后一次访问距离现在的秒数等
stats setting
显示进程启动的参数信息

Memcached添加item的逻辑

计算item的大小,选取合适的slab class。如果其对应的slab class为申请过page,则申请一个page的内存,并将该item存入其中一个chunk当中。即便达到预设的内存限制,也会申请一个page内存空间。
如果其对应的slab class出现过,则在该范围的page当中优先选择过期或被删除的chunk进行存储,其次选择未使用过的。
如果其对应的slab class出现过,但是其所属的所有page都已经存储满了,那么会申请一个新的page,这个page被等分为N个规定大小的chunk,存储到第一个chunk。
如果其对应的slab class出现过,但是其所属的所有page都已经存储满,并且memcached已不能再分配新的内存空间。将根据LRU算法(近期最少使用的),清除某个item并将新项存储到该位置。