博文大纲:
一, 存储常用的指令
1.set 指令
2.add 指令
3.replace 指令
4.append 指令
5.prepend 指令
6.cas 指令
二, 常用的查找指令
1.get 指令
2.gets 指令
3.delete 指令
4.incr 指令
5.decr 指令
6.stats 指令
7.stats items 指令
8.stats slabs 指令
9.stats sizes 指令
10.flush_all 指令
一, 存储常用的指令
常用的存储数据的指令有:
set 命令是保存一个叫做 key 的数据到服务器上;
add 命令是添加一个数据到服务器, 但是服务器必须保证这个 key 是不存在的, 能够保证数据不会被覆盖;
replace 命令是替换一个已经存在的数据, 如果数据不存在, 就是类似 set 功能;
上述指令的语法格式都是一样的, 只是指令不一样而已, 语法如下:
< 命令 > < 键 > < 标记 > < 有效期 > < 数据长度 >
各个参数含义如下:
< 命令 >: 就是 add,set,replace 等指令;
< 键 > - key: 就是保存在服务器上唯一的一个标识符, 不可以与其他的 key 冲突, 否则会覆盖掉原来的数据 (使用 set 命令的话), 这个 key 是为了能够准确的存取一个数据项目;
< 标记 > - flag: 标记的是一个 16 位的无符号整型数据, 用来设置服务器跟客户端一些交互的操作;
< 有效期 > -expiration time: 是数据在服务器上的有效期限, 如果是 0, 则数据永远有效, 单位是秒, Memcached 服务端会把一个数据的有效期设置为当前 Unix 时间 + 设置的有效时间;
< 数据长度 > - bytes: 数据的长度, block data 数据块的长度, 一般这这个长度结束后下一行跟着 block data 数据内容, 发送完数据以后, 客户端一般等待服务器端的返回;
1.set 指令
set 指令用于将数据值 (value) 存储在指定的键 (key) 中, 如果设置的键原本存在值, 则会把原本的值覆盖掉!
基本语法格式:
set key flags exptime bytes [noreply] value
参数说明:
? key: 就是键的名称;
? flags: 可以包括键值对的整型参数, 可以理解为键的标记;
? exptime: 在缓存中保存键值对的时间长度 (以秒为单位, 0 表示永远);
? bytes: 在缓存中存储的字节数;
? noreply(可选): 该参数告知服务器不需要返回数据;
? value: 存储的值 (始终位于第二行);
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set lzj 0 0 8
- jianjian
- STORED
输出信息:
STORED: 保存成功;
ERROR: 保存失败;
2.add 指令
add 指令用于将 value(数据值) 存储在指定的 key(键) 中, 如果 add 的 key 已经存在, 则不会更新数据 (过期的 key 会更新).
基本语法格式:
add key flags exptime bytes [noreply] value
参数说明:
? key: 就是键的名称;
? flags: 可以包括键值对的整型参数, 可以理解为键的标记;
? exptime: 在缓存中保存键值对的时间长度 (以秒为单位, 0 表示永远);
? bytes: 在缓存中存储的字节数;
? noreply(可选): 该参数告知服务器不需要返回数据;
? value: 存储的值 (始终位于第二行);
示例:
以下实例中我们设置:
? key → key
? flag → 0
? exptime → 900 (以秒为单位)
? bytes → 3 (数据存储的字节数)
? value → lzj
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- add key 0 900 3
- lzj
- STORED
输出信息解释:
STORED: 保存成功;
ERROR: 保存失败;
3.replace 指令
replace 指令用于替换已存在的 key(键) 的 value(数据值), 如果 key 不存在, 则替换失败!
语法如下:
replace key flags exptime bytes [noreply] value
参数说明:
? key: 就是键的名称;
? flags: 可以包括键值对的整型参数, 可以理解为键的标记;
? exptime: 在缓存中保存键值对的时间长度 (以秒为单位, 0 表示永远);
? bytes: 在缓存中存储的字节数;
? noreply(可选): 该参数告知服务器不需要返回数据;
? value: 存储的值 (始终位于第二行);
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- add abc 0 900 3
- 123
- STORED
- replace abc 0 900 3
- 234
- STORED
输出信息解释:
STORED: 保存成功;
ERROR: 保存失败;
4.append 指令
append 指令用于向已存在 key(键) 的 value(数据值) 后面追加数据 !
语法如下:
append key flags exptime bytes [noreply] value
参数说明:
? key: 就是键的名称;
? flags: 可以包括键值对的整型参数, 可以理解为键的标记;
? exptime: 在缓存中保存键值对的时间长度 (以秒为单位, 0 表示永远);
? bytes: 在缓存中存储的字节数;
? noreply(可选): 该参数告知服务器不需要返回数据;
? value: 存储的值 (始终位于第二行);
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set new_key 0 0 3
- new
- STORED
- append new_key 0 0 3
- old
- STORED
- get new_key
- VALUE new_key 0 6
- newold
- END
输出信息说明:
? STORED: 保存成功后输出;
? NOT_STORED: 该键在 Memcached 上不存在;
? CLIENT_ERROR: 执行错误;
5.prepend 指令
prepend 指令用于向已存在 key( 键) ) 的 value( 数据值) ) 前面追加数据 , 与 append 正好相反!
语法如下:
prepend key flags exptime bytes [noreply] value
参数说明:
? key: 就是键的名称;
? flags: 可以包括键值对的整型参数, 可以理解为键的标记;
? exptime: 在缓存中保存键值对的时间长度 (以秒为单位, 0 表示永远);
? bytes: 在缓存中存储的字节数;
? noreply(可选): 该参数告知服务器不需要返回数据;
? value: 存储的值 (始终位于第二行);
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set q 0 0 3
- qqq
- STORED
- prepend q 0 0 3
- www
- STORED
- get q
- VALUE q 0 6
- wwwqqq
- END
输出信息说明:
? STORED: 保存成功后输出;
? NOT_STORED: 该键在 Memcached 上不存在;
? CLIENT_ERROR: 执行错误;
6.cas 指令
cas 指令用于执行一个 "检查并设置" 的操作它仅在当前客户端最后一次取值后, 该 key 对应的值没有被其他客户端修改的情况下, 才能够将值写入. 检查是通过 cas_token 参数进行的, 这个参数是 Memcach 指定给已经存在的元素的一个唯一的 64 位值.
语法如下:
cas key flags exptime bytes unique_cas_token [noreply] value
参数说明如下:
? key: 就是键的名称;
? flags: 可以包括键值对的整型参数, 可以理解为键的标记;
? exptime: 在缓存中保存键值对的时间长度 (以秒为单位, 0 表示永远);
? bytes: 在缓存中存储的字节数;
? unique_cas_token 通过 gets 命令获取的一个唯一的 64 位值;
? noreply(可选): 该参数告知服务器不需要返回数据;
? value: 存储的值 (始终位于第二行);
要在 Memcached 上使用 CAS 命令, 需要从 Memcached 服务商通过 gets 命令获取令牌 (token);
gets 命令的功能类似于基本的 get 命令. 两个命令之间的差异在于, gets 返回的信息稍微多一些: 64 位的整型值非常像名称 / 值对的 "版本" 标识符;
实例步骤如下:
? 如果没有设置唯一令牌, 则 CAS 命令执行错误;
? 如果键 key 不存在, 执行失败;
? 添加键值对;
? 通过 gets 命令获取唯一令牌;
? 使用 cas 命令更新数据;
? 使用 get 命令查看数据是否更新;
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- cas tp 0 900 9
- ERROR
- set tp 0 900 9
- Memcached
- STORED
- gets tp
- VALUE tp 0 9 1
- Memcached
- END
- cas tp 0 900 5 1
- Redis
- STORED
- get tp
- VALUE tp 0 5
- Redis
- END
输出信息说明:
? STORED: 保存成功后输出.
? ERROR: 保存出错或语法错误.
? EXISTS: 在最后一次取值后另外一个用户也在更新该数据.
? NOT_FOUND:Memcached 服务上不存在该键值.
二, 常用的查找指令
1.get 指令
get 指令获取存储在 key( 键) ) 中的 value( 数据值) ) , 如果 key 不存在, 则返回空!
语法如下:
get key
多个 key 使用空格隔开, 如下:
get key1 key2 key3
参数说明:
? key: 键值 key-value 结构中的 key, 用于查找缓存值;
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set lv 0 0 3
- lzj
- STORED
- get lv
- VALUE lv 0 3
- lzj
- END
2.gets 指令
gets 指令获取带有 CAS 令牌存 的 value( 数据值) ) , 如果 key 不存在, 则返回空!
语法如下:
gets key
多个 key 使用空格隔开, 如下:
gets key1 key2 key3
参数说明:
? key: 键值 key-value 结构中的 key, 用于查找缓存值;
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
Escape character is '^]'.
- set lv 0 0 3
- aaa
- STORED
- gets lv
- VALUE lv 0 3 13
- aaa
- END
- // 在 使用 gets 命令的输出结果中, 在最后一列的数字 13 代表了 key 为 lv 的 CAS 令牌
3.delete 指令
delete 指令用于删除已存在的 key(键)!
语法如下:
delete key [noreply]
参数说明如下:
? key: 就是键的名称;
? noreply(可选): 该参数告知服务器不需要返回数据;
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set qqq 0 0 3
- aaa
- STORED
- delete qqq
- DELETED
- get qqq
- END
输出信息说明:
? DELETED: 删除成功;
? ERROR: 语法错误或删除失败;
? NOT_FOUND:key 不存在;
4.incr 指令
incr 指令用于对已存在的 key(键) 的数字值进行自增 (必须是十进制的 32 位无符号整数)!
语法如下:
incr key increment_value
参数说明:
? key: 键值 key-value 结构中的 key, 用于查找缓存值;
? increment_value: 增加的数值;
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set vi 0 0 2
- 10
- STORED
- incr vi 10
- 20
- get vi
- VALUE vi 0 2
- 20
- END
输出信息说明:
? NOT_FOUND:key 不存在;
? CLIENT_ERROR: 自增值不是对象;
? ERROR 其他错误, 如语法错误等;
5.decr 指令
decr 指令用于对已存在的 key(键) 的数字值进行自减 (必须是十进制的 32 位无符号整数), 与 incr 指令相反!
语法:
decr key decrement_value
参数说明:
? key: 键值 key-value 结构中的 key, 用于查找缓存值;
? decrement_value: 减少的数值;
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set VIM 0 0 2
- 10
- STORED
- decr VIM 5
- 5
- get VIM
- VALUE VIM 0 2
- 5
- END
输出信息说明:
? NOT_FOUND:key 不存在;
? CLIENT_ERROR: 自增值不是对象;
? ERROR 其他错误, 如语法错误等;
6.stats 指令
stats 指令用于返回统计信息例如 PID(进程号), 版本号, 连接数等.
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- stats
- STAT pid 10527
- STAT uptime 4152
- STAT time 1576506974
- STAT version 1.4.33
- STAT libevent 2.0.22-stable
- STAT pointer_size 64
- STAT rusage_user 1.118058
- STAT rusage_system 0.698786
- STAT curr_connections 5
- STAT total_connections 21
- STAT connection_structures 6
- STAT reserved_fds 20
- STAT cmd_get 7
- STAT cmd_set 19
- STAT cmd_flush 0
- STAT cmd_touch 0
- STAT get_hits 6
- STAT get_misses 1
- STAT get_expired 0
- STAT get_flushed 0
- STAT delete_misses 1
- STAT delete_hits 1
- STAT incr_misses 0
- STAT incr_hits 1
- STAT decr_misses 0
- STAT decr_hits 1
- STAT cas_misses 0
- STAT cas_badval 0
- STAT touch_hits 0
- STAT touch_misses 0
- STAT auth_cmds 0
- STAT auth_errors 0
- STAT bytes_read 815
- STAT bytes_written 459
- STAT limit_maxbytes 2147483648
- STAT accepting_conns 1
- STAT listen_disabled_num 0
- STAT time_in_listen_disabled_us 0
- STAT threads 4
- STAT conn_yields 0
- STAT hash_power_level 16
- STAT hash_bytes 524288
- STAT hash_is_expanding 0
- STAT malloc_fails 0
- STAT log_worker_dropped 0
- STAT log_worker_written 0
- STAT log_watcher_skipped 0
- STAT log_watcher_sent 0
- STAT bytes 648
- STAT curr_items 9
- STAT total_items 18
- STAT expired_unfetched 0
- STAT evicted_unfetched 0
- STAT evictions 0
- STAT reclaimed 0
- STAT crawler_reclaimed 0
- STAT crawler_items_checked 0
- STAT lrutail_reflocked 0
- END
参数解释:
? 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_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: 已过期的数据条目来存储新数据的数目;
7.stats items 指令
stats items 指令用于显示各个 slab 中 item 的数目和存储时长 (最后一次访问距离现在的秒数);
语法如下:
stats items !
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- stats items
- STAT items:1:number 9
- STAT items:1:age 3615
- 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:crawler_items_checked 0
- STAT items:1:lrutail_reflocked 0
- END
8.stats slabs 指令
stats slabs 指令用于显示各个 slab 的信息, 包括 chunk 的大小, 数目, 使用情况等!
语法如下:
stats slabs
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- stats slabs
- 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 9
- STAT 1:free_chunks 10913
- STAT 1:free_chunks_end 0
- STAT 1:mem_requested 648
- STAT 1:get_hits 6
- STAT 1:cmd_set 19
- STAT 1:delete_hits 1
- STAT 1:incr_hits 1
- STAT 1:decr_hits 1
- STAT 1:cas_badval 0
- STAT 1:touch_hits 0
- STAT active_slabs 1
- STAT total_malloced 1048512
- END
9.stats sizes 指令
Memcached stats sizes 命令用于显示所有 item 的大小和个数, 该信息返回两列, 第一列是 item 的大小, 第二列是 item 的个数!
语法如下:
stats sizes
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- stats sizes STAT 96 1 END
- STAT sizes_status disabled
- END
10.flush_all 指令
flush_all 命令用于用于清理缓存中的所有 key=>value( 键 => 值) ) 对, 该命令提供了一个可选参数 time, 用于在指定的时间后执行清理缓存操作.
语法:
flush_all [time] [noreply]
示例:
- [[email protected] ~]# telnet 192.168.1.10 11211
- Trying 192.168.1.10...
- Connected to 192.168.1.10.
- Escape character is '^]'.
- set lv 0 0 3
- qwe
- STORED
- flush_all
- OK
- get lv
- END
来源: http://www.bubuko.com/infodetail-3335203.html