一、介绍
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。
目的:通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
二、命令
(1)存储命令
#(1)Set
#set 命令用于将 value(数据值) 存储在指定的 key(键) 中
#如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用
set key flags exptime bytes [noreply]
value #输出
STORED:保存成功后输出。
ERROR:在保存失败后输出。#(2)Add
#add 命令用于将 value(数据值) 存储在指定的 key(键) 中
#如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应 NOT_STORED
add key flags exptime bytes [noreply]
value#输出
STORED:保存成功后输出。
NOT_STORED :在保存失败后输出。#(3)Replace
#replace 命令用于替换已存在的 key(键) 的 value(数据值)
#如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED
replace key flags exptime bytes [noreply]
value#输出
STORED:保存成功后输出。
NOT_STORED:执行替换失败后输出。#(4)Append
#append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据
append key flags exptime appendBytes [noreply]
value#输出
STORED:保存成功后输出。
NOT_STORED:该键在 Memcached 上不存在。
CLIENT_ERROR:执行错误。#(4)Prepend
#prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据
prepend key flags exptime bytes [noreply]
value#输出
STORED:保存成功后输出。
NOT_STORED:该键在 Memcached 上不存在。
CLIENT_ERROR:执行错误。#(5)CAS
#CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作
#它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入
#检查是通过cas_token(gets指令获取)参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值
cas key flags exptime bytes unique_cas_token [noreply]
value#输出
STORED:保存成功后输出。
ERROR:保存出错或语法错误。
EXISTS:在最后一次取值后另外一个用户也在更新该数据。
NOT_FOUND:Memcached 服务上不存在该键值。
(2)查找命令
#(1)Get
#get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空
get key1 [key2 key3 ...]#输出
VALUE key flags bytes
value
END#(2)Gets
#gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
gets key1 [key2 key3 ...]#输出
VALUE key flags bytes cas
value
END#(3)Delete
#delete 命令用于删除已存在的 key(键)
delete key [noreply]#输出
DELETED:删除成功。
ERROR:语法错误或删除失败。
NOT_FOUND:key 不存在。#(4)Incr Decr
#incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作
#incr 与 decr 命令操作的数据必须是十进制的32位无符号整数
#如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR
incr key increment_value
decr key decrement_value#输出
NOT_FOUND:key 不存在。
CLIENT_ERROR:自增值不是对象。
ERROR其他错误,如语法错误等。
(3)统计命令
#(1)stats
#stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等
stats#输出
STAT pid xxx
...
Endpid: 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)stats
#stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)
stats items#输出:
STAT items:slab_id:number xx
STAT items:slab_id:age xx
STAT items:slab_id:evicted xx
STAT items:slab_id:evicted_nonzero xx
STAT items:slab_id:evicted_time xx
STAT items:slab_id:outofmemory xx
STAT items:slab_id:tailrepairs xx
STAT items:slab_id:reclaimed xx
STAT items:slab_id:expired_unfetched xx
STAT items:slab_id:evicted_unfetched xx
... slab_id_n ...
END
#(3)stats slabs
#stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等
stats slabs#输出
STAT slab_id:chunk_size xx
STAT slab_id:chunks_per_page xx
STAT slab_id:total_pages xx
STAT slab_id:total_chunks xx
STAT slab_id:used_chunks xx
STAT slab_id:free_chunks xx
STAT slab_id:free_chunks_end xx
STAT slab_id:mem_requested xx
STAT slab_id:get_hits xx
STAT slab_id:cmd_set xx
STAT slab_id:delete_hits xx
STAT slab_id:incr_hits xx
STAT slab_id:decr_hits xx
STAT slab_id:cas_hits xx
STAT slab_id:cas_badval xx
STAT slab_id:touch_hits xx
... slab_id_n ...
STAT active_slabs xx
STAT total_malloced xx
#(4)stats sizes
#stats sizes 命令用于显示所有item的大小和个数。
#该信息返回两列,第一列是 item 的大小,第二列是 item 的个数。
stats sizesSTAT item_size item_count
END
#(5)flush_all
# flush_all 命令用于清理缓存中的所有 key=>value(键=>值) 对。
#该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。
flush_all [time] [noreply]
#(6)stats cachedump
#slab id的缓存转储,并限制要转储的最大键数。作为遍历单个slab的所有key
stats cachedump slab_id key_size