memcache-02 memcached命令使用

memcache-02 memcached命令使用

memcached命令分类

  Memcached提供了为数不多的几个命令来完成与服务器端的交互,这些命令基于memcached的协议实现。

1)存储类命令:set, add, replace, append, prepend
2)获取数据类命令:get, delete, incr/decr
3)统计类命令:stats, stats items, stats slabs, stats sizes
4)清理命令: flush_all

存储类命令

1、set

1)作用

  将 value(数据值) 存储在指定的 key(键)中,若该key已存在,则更新key对应的数据值。

2)语法

1
2
3
4
5
6
7
8
9
10
set key flags exptime bytes [noreply] 
value #第二行输入数据值

#参数说明
key:键值 key-value 结构中的 key,用于查找缓存值
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据
value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)

3)实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^] #输入ctrl+],回车
telnet> #直接回车
set k 0 20 3 #设置k的数值有效期20秒,数值长度3字节(UTF-8中一个应为字母占一个字节)
abc #输入数据值
STORED #STORED表示保存成功
get k #查找k缓存值
VALUE k 0 3 #输出k所在键值对的flags 数据值长度
abc #输出数据值
END
get k
VALUE k 0 3
abc
END
get k #20秒过后再次查询,由于就会发现数据过期,就没有输出了
END
get k
END
quit #退出telnet
Connection closed by foreign host.
[root@localhost ~]#

4)结果

1
2
STORED:保存成功
ERROR: 保存失败

5)注意事项

1
2
3
4
5
6
7
8
1、exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
其中,“永远”有效并非是真正意义上的永远
首先,memcached默认最长有效期30天,即使设exptime为0,30天后也会失效
其次,重启memcached服务会导致数据清空,数据也就不存在了

2、set方法可以理解为add方法和replace方法的集合体。
1)若要设置的key不存在时,则set方法与add方法的效果一致;
2)若要设置的key已经存在时,则set方法与replace方法效果一样。

2、add

1)作用

  将 value(数据值)存储在指定的 key(键) 中,如果要设置的key不存在,则add方法与set方法的效果一致;如果要设置的key已经存在,add不会改变其值,返回 NOT_STORED(保存失败)。

2)语法

  和set方法一样

3)实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet>
add k1 0 30 4
test
STORED
add k1 0 30 4
tttt
NOT_STORED
get k1
VALUE k1 0 4
test #可以看到其值不变,add不能修改已存在的key的值
END
quit
Connection closed by foreign host.
[root@localhost ~]#

4)结果

1
2
STORED:		保存成功
NOT_STORED :保存失败

3、replace

1)作用

  替换已存在的key的value,若key不存在,则替换失败且返回NOT_STORED

2)语法

  和set方法一样

3)实例

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
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet>
replace k2 0 30 3
aaa
NOT_STORED #若key不存在则保存失败
add k2 0 30 3 #将k2对应值设为bbb
bbb
STORED
get k2
VALUE k2 0 3
bbb
END
replace k2 0 30 3 #将k2对应值替换为ddd
ddd
STORED
get k2
VALUE k2 0 3
ddd
END
quit
Connection closed by foreign host.
[root@localhost ~]#

4)结果

1
2
STORED:		保存成功
NOT_STORED :保存失败

4、append 命令

1)作用

  用于向已存在 key(键) 的 value(数据值) 后面追加数据

2)语法

  和set方法一样

3)实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet>
append k3 0 0 3
aaa
NOT_STORED #append尝试追加不存在的key,会提示保存失败
add k3 0 0 3
aaa
STORED
append k3 0 0 3
bbb
STORED
get k3
VALUE k3 0 6
aaabbb #追加成功
END
quit
Connection closed by foreign host.
[root@localhost ~]#

4)结果

1
2
3
STORED:		 保存成功
NOT_STORED : 保存失败,该键在 Memcached 上不存在
CLIENT_ERROR:执行错误。

5、prepend

1)作用

  用于向已存在 key(键) 的 value(数据值) 前面追加数据

2)语法

  和set方法一样

3)实例

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
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet>
prepend k4 0 0 3
aaa
NOT_STORED #prepend尝试追加不存在的key,会提示保存失败
add k4 0 0 3
aaa
STORED
prepend k4 0 0 3
bbb
STORED
prepend k4 0 0 3
ccc
STORED
get k4
VALUE k4 0 9
cccbbbaaa #追加成功
END
quit
Connection closed by foreign host.
[root@localhost ~]#

4)结果

1
2
3
STORED:		 保存成功
NOT_STORED : 保存失败,该键在 Memcached 上不存在
CLIENT_ERROR:执行错误。

6、CAS

  略

获取数据类命令(查找命令)

1、get

1)作用

  用于获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空

2)语法

1
2
get key
get key1 key2 key3

2、gets

1)作用

  用于获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空

2)语法

1
2
gets key
gets key1 key2 key3

3、delete

1)作用

  用于删除已存在的 key(键)。

2)语法

1
2
3
4
5
delete key [noreply]

参数说明:
key:键值 key-value 结构中的 key,用于查找缓存值。
noreply(可选): 该参数告知服务器不需要返回数据

3)结果

1
2
3
DELETED:		删除成功。
ERROR: 语法错误或删除失败。
NOT_FOUND:key 不存在。

4、 incr 与 decr

1)作用

  用于对已存在的 key(键) 的数字值进行自增或自减操作。

2)语法

1
2
incr key increment_value(增加的数值)
decr key decrement_value(减少的数值)

3)实例(以incr为例,decr与之一样)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet>
set k6 0 0 1
6
STORED
incr k6 1 #加一
7
incr k6 2 #加二
9
incr k6 3
12
get k6
VALUE k6 0 2
12
END
quit
Connection closed by foreign host.
[root@localhost ~]#

4)结果

1
2
3
NOT_FOUND:		key不存在。
CLIENT_ERROR: 自增值不是对象。
ERROR: 其他错误,如语法错误等。

统计类命令

1、stats

1)作用

  用于返回统计信息例如 PID(进程号)、版本号、连接数等。

2)语法

1
stats

3)实例

1
2
3
4
5
6
7
8
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet>
stats
#略

4)结果

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
38
pid:	memcache服务器进程ID
uptime:服务器已运行秒数
time:服务器当前Unix时间戳
version:memcache版本
pointer_size:操作系统指针大小
rusage_user:进程累计用户时间
rusage_system:进程累计系统时间
curr_connections:当前连接数量
total_connections:Memcached运行以来连接总数
connection_structures:Memcached分配的连接结构数量
cmd_get:get命令请求次数
cmd_set:set命令请求次数
cmd_flush:flush命令请求次数
get_hits:get命令命中次数
get_misses:get命令未命中次数
delete_misses:delete命令未命中次数
delete_hits:delete命令命中次数
incr_misses:incr命令未命中次数
incr_hits:incr命令命中次数
decr_misses:decr命令未命中次数
decr_hits:decr命令命中次数
cas_misses:cas命令未命中次数
cas_hits:cas命令命中次数
cas_badval:使用擦拭次数
auth_cmds:认证命令处理的次数
auth_errors:认证失败数目
bytes_read:读取总字节数
bytes_written:发送总字节数
limit_maxbytes:分配的内存总大小(字节)
accepting_conns:服务器是否达到过最大连接(0/1)
listen_disabled_num:失效的监听数
threads:当前线程数
conn_yields:连接操作主动放弃数目
bytes:当前存储占用的字节数
curr_items:当前存储的数据总数
total_items:启动以来存储的数据总数
evictions:LRU释放的对象数目
reclaimed:已过期的数据条目来存储新数据的数目

2、其他统计命令略

清理命令

flush_all

1)作用

  用于用于清理缓存中的所有 key=>value(键=>值) 对

2)语法

1
2
3
4
5
flush_all [time] [noreply]

参数说明:
time(可选):用于在制定的时间后执行清理缓存操作
noreply(可选): 该参数告知服务器不需要返回数据

3)实例

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
[root@localhost ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
^]
telnet>
add k11 0 0 3
aaa
STORED
add k12 0 0 3
bbb
STORED
get k11 k12
VALUE k11 0 3
aaa
VALUE k12 0 3
bbb
END
flush_all
OK #清除成功
get k11 k12
END
quit
Connection closed by foreign host.
[root@localhost ~]#
欢迎打赏,谢谢
------ 本文结束------
0%