所有操作基于memcached 1.4.15
标准协议
memcached所有的标准协议包含在对item执行命令过程中,一个item包含:
- 一个key
- 一个32位的标志值
- 以秒为单位的失效时间
- 一个64为的CAS值,这个是唯一的数据。CAS是可选的,可以使用”-C”禁止CAS(启动时)
基本操作
存储操作
命令:
add
set
replace
append
prepend
cas
格式:
command key flag exptime bytes CRLF
value
参数 | 含义 |
---|---|
command | 以上命令中的任意一个 |
key | 缓存名 |
flag | 一个16位的无符号的整数(以十进制的方式表示),该标志将和需要存储的数据一起存储,并在客户端get数据时返回,客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。 |
exptime | 失效时间。若为0表示存储的数据永远不过时(LRU 等替换)。如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。 |
bytes | 存储数据的字节数 |
CRLF | 回车换行\r\n |
value | 缓存的数据 |
操作基于Key/Value。
- 实例:
add name 0 3600 5
jason
STORED
add sex 0 3600 4
male
STORED
返回:
STORED:成功
NOT_STORED:失败解释:
参数 含义 add 添加(存在则操作失败) replace 替换(不存在则操作失败) set 设置(不存在则添加,存在则替换) append 后追加(不存在则操作失败)flag和exptime无效 prepend 前追加(不存在则操作失败) cas(check and set) 原子更新,请求附带cas值。比较cas值,相等则更新。
set name 0 3600 5
jason
STORED
gets name
VALUE name 0 5 17
jason
END
cas name 0 0 5 12 # cas值不相等 12 != 17
carte
EXISTS
cas name 0 0 6 17 # cas值相等
carter
STORED
读取操作
命令:
get
gets
格式
get key1 #获取单个
get key1 key2 key3 #获取多个
gets key1
gets key1 key2 key3
- 实例:
get name sex
VALUE name 0 5 #VALUE key flag bytes
jason
VALUE sex 0 4
male
END
gets name sex
VALUE name 0 5 11 #VALUE key flag bytes cas值
jason
VALUE sex 0 4 12
male
END
- 解释:gets会额外返回一个cas值(类似于版本号),set、replace、prepend、append等操作后都会改变。
删除操作
命令:
delete
实例:
delete name sex
CLIENT_ERROR bad command line format. Usage: delete <key> [noreply] #只能删单条数据
delete name
DELETED
解释:一次只能删除一个键值对,不过Key不存在则NOT_FOUND
注意:
直接delete和缓存过期不一样。
通过stats的curr_items可以发现。
过期:
add name 0 10 5 #设置一个失效时间为10秒的缓存
jason
STORED
#过了10秒钟后
get name #第一次获取
END
get name #第二次获取
END
#上面看的不明显,在memcached -vvv下看发生了什么
<30 add name 0 10 5
30: going from conn_parse_cmd to conn_nread
> NOT FOUND name #添加,没有设置过name
>30 STORED
<30 get name
> FOUND KEY name -nuked by expire #发现name过期了,然后才删除
>30 END
<30 get name
> NOT FOUND name #没有发现
>30 END
delete:
add name 0 10 5
jason
STORED
delete name
DELETED
get name
END
#再来看服务端
<30 add name 0 10 5
30: going from conn_parse_cmd to conn_nread
> NOT FOUND name
>30 STORED
<30 delete name
> FOUND KEY name #发现有name,删除它
>30 DELETED
<30 get name
> NOT FOUND name #没有发现
>30 END
数值增减操作
命令:
incr
decr
格式:
incr key num #增加
decr key num #减少
- 实例:
add money 0 3600 1
0
STORED
incr money 10 #增加
10 #立刻返回
decr money 5
5
- 解释:
- num值过大CLIENT_ERROR invalid numeric delta argument
- decr最多把value减少到0。
统计操作
显示版本
version
显示进程和当前状态等信息
stats
STAT pid 16843 #当前进程
STAT uptime 12270 #运行时间(秒)
STAT time 1437547780 #当前时间(时间戳)
STAT version 1.4.15 #memcached版本
STAT libevent 1.4.13-stable #libevent版本
STAT pointer_size 32 #操作系统位数(32位)
STAT rusage_user 0.269958 #进程累计用户时间
STAT rusage_system 0.507922 #进程累计系统时间
STAT curr_connections 10 #当前打开的连接
STAT total_connections 11 #服务启动后总共打开的连接
STAT connection_structures 11 #服务器分配的连接结构数
STAT reserved_fds 20
STAT cmd_get 65 #执行get命令次数
STAT cmd_set 29 #执行set命令次数
STAT cmd_flush 0 #执行flush_all命令次数
STAT cmd_touch 0
STAT get_hits 40 #get命中次数
STAT get_misses 25 #get未命中次数
STAT delete_misses 4 #delete未命中次数
STAT delete_hits 6 #delete命中次数
STAT incr_misses 0 #incr未命中次数
STAT incr_hits 8 #incr命中次数
STAT decr_misses 0 #decr未命中次数
STAT decr_hits 3 #decr命中次数
STAT cas_misses 0 #cas未命中次数
STAT cas_hits 1 #cas命中次数
STAT cas_badval 1 #使用擦拭次数
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 2064 #总读取字节总数(请求字节数)
STAT bytes_written 3352 #总写入字节总数(结果字节数)
STAT limit_maxbytes 67108864 #分配的内存数(字节)
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4 #线程数
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 262144
STAT hash_is_expanding 0
STAT bytes 111 #当前服务存储items占用的字节数
STAT curr_items 2 #当前item个数
STAT total_items 35 #总共item个数
STAT expired_unfetched 2
STAT evicted_unfetched 0
STAT evictions 0 #为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
STAT reclaimed 3
END
- cmd_get/uptime 结果是平均每秒请求缓存的次数——结果值越大,说明Memcached的利用率越高,站点的访问量大,如果太低,用文件系统缓存就可以了,根本不会体现出使用memcached的强大性能。
- 缓存命中率:get_hits/cms_get * 100%
显示各个slab中item的数目和存储时长(最后一次访问距离现在的秒数)
stats items
STAT items:1:number 2
STAT items:1:age 3261
STAT items:1:evicted 0
STAT items:1:evicted_nonzero 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0
STAT items:1:reclaimed 3
STAT items:1:expired_unfetched 2
STAT items:1:evicted_unfetched 0
END
显示各个slab的信息(包括chunk的大小、数目、使用情况等)
stats slabs
STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 2
STAT 1:free_chunks 13105
STAT 1:free_chunks_end 0
STAT 1:mem_requested 111
STAT 1:get_hits 40
STAT 1:cmd_set 29
STAT 1:delete_hits 6
STAT 1:incr_hits 8
STAT 1:decr_hits 3
STAT 1:cas_hits 1
STAT 1:cas_badval 1
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048560
END
统计所有item大小和个数
stats sizes
STAT 64 2
END
stats cachedump
- 格式:
stats cachedump slab_id limit_num
详解:显示某个slab中的前limit_num个key列表,显示格式如下
ITEM key_name [ value_length b; expire_time|access_time s]
其中,memcached 1.2.2及以前版本显示的是访问时间(timestamp),1.2.4以上版本,包括1.2.4显示过期时间(timestamp)。如果是永不过期的key,expire_time会显示为服务器启动的时间。
stats detail [on|off|dump]
flush_all
清空统计数据
stats reset
使在内存中所有的item失效。加入参数则表示在N秒后失效所有item。这项操作会立即返回,不会暂停服务器。这个操作并不会真的释放内存空间,而是标志所有的item为失效
相关操作
查看启动memcache服务
netstat -lp | grep memcached
查看进程
ps -ef | grep memcached
参考链接
- http://nkcoder.github.io/blog/20140215/memcached-usage-parameters-commands
- http://improve.iteye.com/blog/1462037
- http://blog.chinaunix.net/uid-20548989-id-1667272.html
- http://www.cnblogs.com/springdong/archive/2013/05/20/3089897.html
- http://blog.163.com/czg_e/blog/static/46104561201132852042812/
- http://blog.csdn.net/jinxingfeng_cn/article/details/24264693
- http://blog.chinaunix.net/uid-20548989-id-1667272.html
- http://freeloda.blog.51cto.com/2033581/1289806