Memcached
命令格式
|
|
command: 要执行的命令,如set, get, replace等
key: 操作的键名称
flags: 客户端存储的键值对之外的信息
expireTime: 过期时间,设置为0则为永久有效
bytes: 数据长度
datablock: 实际的数据内容
执行命令(CRUD)
C: add, set
R: get, gets
U: set, cas, replace
D: delete
统计命令
stats: 当前服务器运行的统计信息
stats items:
内存模型
memcached中将内存模型主要有三个概念,page, slab和chunk,如下图所示
Page: 内存分配的单位,即每次memcached申请内存的大小,申请得到的内存将分配给相应的slab进行使用
Slab: memcached中将一组相同大小的chunk归为一组,称为slab, 每个slab中的chunk大小都是相同的,并且只负责一定大小范围内的数据存储
Chunk: 固定大小,它的大小即为所在slab的最大存储尺寸;memcached中数据实际存储的地方,同一个slab中的chunk大小均相同,但不同slab中的chunk的大小可以不相同
memcached的执行参数
|
|
几点说明
memcached内存中的数据并不会被删除,当记录到期后,memcached会采用lazy expiration的策略将这条记录置为不可见,同时,这条记录所占用的空间可以被重复使用; 另外,lazy expiration的策略也会导致memcached并不会花时间在检查记录的过期上
memcached默认使用的是LRU(Least Recently Used)的策略来删除数据,可以通过-M参数禁用该机制
参考
memcached的内存模型: http://xenojoshua.com/2011/04/deep-in-memcached-how-it-works/
memcached和redis在内存管理方面的对比: http://www.biaodianfu.com/redis-vs-memcached.html
协议说明: https://github.com/memcached/memcached/blob/master/doc/protocol.txt
CheatSheet: http://lzone.de/cheat-sheet/memcached