设为首页 收藏本站
查看: 1188|回复: 0

[经验分享] Memcached命令解析

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-22 08:41:59 | 显示全部楼层 |阅读模式
Memcached命令解析


一、存储命令

存储命令的格式:
<command name> <key> <flags> <exptime> <bytes>
<data block>

参数说明如下:
<command name>
Set/add/replace
<key>
查找关键字
<flags>
客户机使用它存储关于键值对的额外信息
<exptime>
该数据的存活时间,0表示永远
<bytes>
存储字节数
<data block>
存储的数据块(可直接理解为key-value结构中的value)

1. set命令
无论如何都存储的set。
这个set的命令在memcached中的使用频率极高。set命令不但可以简单添加,如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

示例:
1
2
3
set key1 0 0 1
1
STORED




2. add命令
只有数据不存在时进行添加的add。
如果是新加入的item,那么将其直接放在LRU顶端;如果item已经存在导致add失败,那么将这个item从LRU链表上摘下再放到LRU顶端。

示例:
1
2
3
add newuser 0 0 6
ryanxu
STORED




3. replace命令
只有数据存在时进行替换的replace。

示例:
1
2
3
replace newuser 0 0 6
kokoxu
STORED




4. append命令
紧接着已经存在的item增加item。这个操作不允许增加原来的item限制,对管理链表很有用。

示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
get username
END
set username 0 0 6
ryanxu
STORED
get username
VALUE username 0 6
ryanxu
END
append username 0 0 6
kokoxu
STORED
get username
VALUE username 0 12
ryanxukokoxu
END




在现有的缓存数据后添加缓存数据,如现有缓存的key不存在服务器响应为NOT_STORED。

5. prepend命令
与append命令类似,这个命令是在已存在的数据前加入新数据。

示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
set username 0 0 6
ryanxu
STORED
get username
VALUE username 0 6
ryanxu
END
prepend username 0 0 6
kokoxu
STORED
get username
VALUE username 0 12
kokoxuryanxu
END




6. cas命令
cas即checked and set的意思,如果从上次读取到现在没有更新,那么存入数据,处理更新竞争很有用。
只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”。

示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
gets newuser
VALUE newuser 0 6 8
kokoxu
END
cas newuser 0 0 6 9
aaaaaa
EXISTS
cas newuser 0 0 6 8
aaaaaa
STORED
get newuser
VALUE newuser 0 6
aaaaaa
END




二、读取命令

1. get命令
get命令的key可以表示一个或者多个键,键之间以空格隔开

示例:
1
2
3
4
5
6
7
8
9
10
get newuser
VALUE newuser 0 6
aaaaaa
END
get key2 key4
VALUE key2 0 2
22
VALUE key4 0 4
4444
END




2. gets命令
使用CAS的get命令,返回的item带有一个CAS标识符 (一个唯一的64位数)。使用cas命令返回数据。如果得到的item的cas值被更改了,这个数据将不会被保存。
可以看到,gets命令比普通的get命令多返回了一个数字。这个数字可以检查数据是否发生改变。当key对应的数据改变时,这个多返回的数字也会改变。

示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
get newuser
VALUE newuser 0 6
aaaaaa
END
gets newuser
VALUE newuser 0 6 9
aaaaaa
END
replace newuser 0 0 6
kkkkkk
STORED
get newuser
VALUE newuser 0 6
kkkkkk
END
gets newuser
VALUE newuser 0 6 10
kkkkkk
END




三、删除命令

删除命令的格式:
delete <key> <time>

参数说明如下:
<key>
需要被删除数据的key
<time>
客户端希望服务器将该数据删除的时间(unix时间或者从现在开始的秒数)

示例:
1
2
3
4
delete newuser
DELETED
delete newuser
NOT_FOUND




可以看到,删除已存在的键值和不存在的记录可以返回不同的结果。

四、incr/decr命令

Increment and Decrement. 如果item是以64位整型存储的,那么可以使用incr和decr命令修改那个数。
如果数据不存在,那么将返回失败。

命令格式为:
Incr <key> <value>

Decr <key> <value>

参数说明:
<key>
数据项的key
<value>
用户希望增加/减少的数据的数值。该数值是一个32位十进制的无符号整形变量。

注意:
a) 如果一个数据项的有效期被设置为0,这时使用decr命令是无法减少数据。
b) 如果要执行 incr key -1 的操作不会有什么问题,结果和你希望的一样。但是,执行decr -1时的结果一定会让你觉得很意外,因为它的结果无论key的数据是什么结果的都是0.原因是:在这两个命令的执行过程中都是吧-1当做一个无符号的整形处理的。
c) 执行decr命令时数据的长度不会随之而减小,而是在返回数据的后面填补空格。但是执行incr命令越界后会自动的增加数据的位数。

五、状态查看命令

1. stats命令
查看memcached状态的基本命令,通过这个命令可以看到如下信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
STAT pid 22459                             进程ID   
STAT uptime 1027046                        服务器运行秒数   
STAT time 1273043062                       服务器当前unix时间戳   
STAT version 1.4.4                         服务器版本   
STAT pointer_size 64                       操作系统字大小(这台服务器是64位的)   
STAT rusage_user 0.040000                  进程累计用户时间   
STAT rusage_system 0.260000                进程累计系统时间   
STAT curr_connections 10                   当前打开连接数   
STAT total_connections 82                  曾打开的连接总数   
STAT connection_structures 13              服务器分配的连接结构数   
STAT cmd_get 54                            执行get命令总数   
STAT cmd_set 34                            执行set命令总数   
STAT cmd_flush 3                           指向flush_all命令总数   
STAT get_hits 9                            get命中次数   
STAT get_misses 45                         get未命中次数   
STAT delete_misses 5                       delete未命中次数   
STAT delete_hits 1                         delete命中次数   
STAT incr_misses 0                         incr未命中次数   
STAT incr_hits 0                           incr命中次数   
STAT decr_misses 0                         decr未命中次数   
STAT decr_hits 0                           decr命中次数   
STAT cas_misses 0    cas未命中次数   
STAT cas_hits 0                            cas命中次数   
STAT cas_badval 0                          使用擦拭次数   
STAT auth_cmds 0   
STAT auth_errors 0   
STAT bytes_read 15785                      读取字节总数   
STAT bytes_written 15222                   写入字节总数   
STAT limit_maxbytes 1048576                分配的内存数(字节)   
STAT accepting_conns 1                     目前接受的链接数   
STAT listen_disabled_num 0                  
STAT threads 4                             线程数   
STAT conn_yields 0   
STAT bytes 0                               存储item字节数   
STAT curr_items 0                          item个数   
STAT total_items 34                        item总数   
STAT evictions 0                           为获取空间删除item的总数




2. stats items命令
输出各个slab中的item信息,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
STAT items:1:number 2
STAT items:1:age 1188
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 0
STAT items:1:expired_unfetched 0
STAT items:1:evicted_unfetched 0
STAT items:1:crawler_reclaimed 0
STAT items:1:lrutail_reflocked 0
END




3. stats slabs命令
输出slab中更详细的item信息,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 2
STAT 1:free_chunks 10920
STAT 1:free_chunks_end 0
STAT 1:mem_requested 144
STAT 1:get_hits 19
STAT 1:cmd_set 12
STAT 1:delete_hits 1
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 2
STAT 1:cas_badval 2
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048512
END




4. stats sizes命令
输出所有item的大小和个数,如下:
1
2
3
stats sizes
STAT 96 2
END




5. stats cachedump <slab_id> <limit_num>
根据<slab_id>输出相同的<slab_id>中的item信息。<limit_num>是输出的个数,当<limit_num>为0是输出所有的item。

示例:
1
2
3
4
5
6
7
8
9
10
stats cachedump 1 0
ITEM key4 [4 b; 1429583183 s]
ITEM key2 [2 b; 1429583183 s]
END
stats cachedump 1 1
ITEM key4 [4 b; 1429583183 s]
END
stats cachedump 1 2
ITEM key4 [4 b; 1429583183 s]
ITEM key2 [2 b; 1429583183 s]




这里slab_id为1,是stats items返回的结果(STAT items后面的数字)决定的;limit_num是返回多少条记录,不过0表示显示出所有记录,而n(n>0)就表示显示n条记录,如果n超过该slab下的所有记录,则结果和0返回的结果一致。

六、flush_all命令

使在内存中所有的item失效。加入参数则表示在N秒后失效所有item。这项操作会立即返回,不会暂停服务器。这个操作并不会真的释放内存空间,而是标志所有的item为失效。

示例:
1
2
3
4
flush_all
OK
get username
END



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59414-1-1.html 上篇帖子: Repcached实现Memcached主从复制功能 下篇帖子: memcache缓冲雪崩现象
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表