memcached命令
-
- 标准协议
- 存储命令
- set命令
- add命令
- replace命令
- append命令
- prepend命令
- cas命令
- 读取命令
- 删除命令
- incr/decr命令
- 查看memcached使用状态
- stats命令
- stats items命令
- stats slabs命令
- stats sizes命令
- flush_all命令
memcached
命令
标准协议
memcached
所有的标准协议包含在对item
执行命令过程中,一个item
包含:
·
一个key
·
一个32
位的标志值
·
以秒为单位的失效时间
·
一个64
为的CAS
值,这个是唯一的
·
数据
CAS
是可选的,可以使用“
-C
”
禁止CAS
。
大多数ascii
命令允许“noreply”
。建议大家在ascii
协议下别用“noreply”
,因为那样不会报请求错误。“noreply”
的目的是在执行交互命令(如:set
、add
)后,避免等待返回的包。
二进制协议将“noreply”
定义为声明。如果你的客户端支持或者使用二进制协议,那么你将会用到它。
存储命令
首先客户端向服务器按照如下格式发送命令行:
<command
name> <key> <flags> <exptime> <bytes>\r\n
a) <command name>
可以是"set", "add", "replace"
。
"set"
表示按照相应的<key>
存储该数据。
"add"
表示按照相应的<key>
添加该数据,
但是如果该<key>
已经存在则会操作失败。
"replace"
表示按照相应的<key>
替换数据,
但是如果该<key>
不存在则操作失败
b) <key>
客户端需要保存数据的key
。
c) <flags>
是一个16
位的无符号的整数(
以十进制的方式表示)
。该标志将和需要存储的数据一起存储,
并在客户端get
数据时返回。客户可以将此标志用做特殊用途,此标志对服务器来说是不透明的。
d) <exptime>
过期的时间。如果该数值为0
表示存储的数据永远不过时(
但是,
该数据有可能被其他项所替换掉。因为服务器采用了LRU(
最近最久没有使用)
的算法替换)
。如果非0(unix
时间或者距离此时的秒数),
当过期后,
服务器可以保证用户得不到该数据(
以服务器时间为标准)
。
e) <bytes>
需要存储的字节数(
不包含最后的"\r\n"),
当用户希望存储空数据时,<bytes>
可以为0
f)
最后客户端需要加上"\r\n"
作为"
命令头"
的结束标志。
<data
block>\r\n
紧接着"
命令头"
结束之后就要发送数据块(
即希望存储的数据内容),
最后加上"\r\n"
作为此次通讯的结束。
reply
当以上数据发送结束之后,
服务器将返回一个应答。可能有如下的情况:
a) "STORED\r\n"
表示存储成功
b) "NOT_STORED\r\n"
表示存储失败,
但是该失败不是由于错误。通常这是由于"add"
或者"replace"
命令本身的要求所引起的,
或者该项在删除队列之中(
见delete
命令)
。
set
是保存数据命令。会覆盖已存在的数据,而新数据将在LRU
顶端
只有在该数据不存在时才保存该数据。如果是新加入的item
,那么将其直接放在LRU
顶端;如果item
已经存在导致add
失败,那么将这个item
从LRU
链表上摘下再放到LRU
顶端。
替换已经存在的数据。 这个操作几乎用不到。
紧接着已经存在的item
增加item
。这个操作不允许增加原来的item
限制,对管理链表很有用。
与append
命令类似,这个命令是在已存在的数据前加入新数据。
检查并存储(
Check
And Set)
或者比较并更新(Compare And Swap)
。如果从上次读取到现在没有更新,那么存入数据,处理更新竞争很有用。
读取命令
获取数据的格式:
get
<key>*\r\n
a) <key>*
表示一个或者多个key(
以空格分开)
b) "\r\n"
命令头的结束
reply
服务器端将返回0
个或者多个的数据项。每个数据项都是由一个文本行和一个数据块组成。当所有的数据项都接收完毕将收到"END\r\n"
每一项的数据结构:
VALUE <key>
<flags> <bytes>\r\n
<data
block>\r\n
a) <key>
希望得到存储数据的key
b)
<falg>
发送set
命令时设置的标志项
c)
<bytes>
发送数据块的长度(
不包含"\r\n")
d)
"\r\n"
文本行的结束标志
e) <data
block>
希望接收的数据项。
f)
"\r\n"
接收一个数据项的结束标志。
如果有些key
出现在get
命令行中但是没有返回相应的数据,这意味着服务器中不存在这些项,这些项过时了,或者被删除了。
get
读取命令, 更具一个或多个key
查找数据,并返回所找到的数据。
使用CAS
的get
命令,返回的item
带有一个CAS
标识符 (
一个唯一的64
位数)
。使用cas
命令返回数据。如果得到的item
的cas
值被更改了,这个数据将不会被保存。
删除命令
如果存在,将item
从cache
中删除,
delete
命令格式:
delete <key>
<time>\r\n
a)
<key>
需要被删除数据的key
b) <time>
客户端希望服务器将该数据删除的时间(unix
时间或者从现在开始的秒数)
c) "\r\n"
命令头的结束
reply
a)
"DELETED\r\n"
删除成功
b) "NOT_FOUND\r\n"
需要删除的key
不存在
incr/decr
Increment and
Decrement.
如果item
是以64
为整型存储的,那么可以使用incr
和decr
命令修改那个数。
如果数据不存在,那么将返回失败。
命令格式:
incr <key>
<value>\r\n
or
decr <key>
<value>\r\n
a)
<key>
数据项的key
b) <value>
用户希望增加/
减少的数据的数值.
该数值是一个32
位十进制的无符号整形变量。
c) "\r\n"
命令行结束标志
reply
a) "NOT_FOUND\r\n"
没有找到需要操作的项。
b)
"<value>\r\n" <value>
数据项有效期的最新剩余时间。
注意:
a)
如果一个数据项的有效期被设置为0,
这时使用decr
命令是无法减少数据。
b)
如果要执行 incr key -1
的操作不会有什么问题,
结果和你希望的一样。但是,
执行decr -1
时的结果一定会让你觉得很意外,
因为它的结果无论key
的数据是什么结果的都是0.
原因是:
在这两个命令的执行过程中都是吧-1
当做一个无符号的整形处理的。
c)
执行decr
命令时数据的长度不会随之而减小,
而是在返回数据的后面填补空格。但是执行incr
命令越界后会自动的增加数据的位数。
查看memcached
使用状态
通过这些命令可以查看memcached
服务器的使用状态。
查看memcached
状态的基本命令,通过这个命令可以看到如下信息:
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
的总数
|
stats items
输出各个slab
中的item
信息。s
stats slabs
输出slab
中更详细的item
信息
stats sizes
输出所有item
的大小和个数
stats cachedump
<slab_id> <limit_num>
根据<slab_id>
输出相同的<slab_id>
中的item
信息。<limit_num>
是输出的个数,当<limit_num>
为0
是输出所有的item
。
flush_all
使在内存中所有的item
失效。加入参数则表示在N
秒后失效所有item
。这项操作会立即返回,不会暂停服务器。这个操作并不会真的释放内存空间,而是标志所有的item
为失效
分享到:
相关推荐
存储命令的格式:<command> <key> <flags> <exptime> <bytes><data>参数说明如下: set/add/replace 查找关键字 ...这个set的命令在memcached中的使用频率极高。set命令不但可以简单添加,如果
本包包括了Linux安装命令以及Memcached安装所有的jar包,另外附加客户端测试java代码所依赖的jar
包含资源:memcached代码分析详解 memcached命令参数大全 memcached深度分析 memcached完全剖析(1-5)整理 memcached源码分析(自己整理 未完) Memcached源码剖析笔记 分布式存储系统架构
1.Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据...
HandlerSocket的横空出世让人们眼前一亮,当时我还写了一篇文章介绍了其用法梗概,时至今日,由于种种原因,HandlerSocket并没有真正流行起来,不过庆幸的是MySQL官方受其启发,研发了基于InnoDB的Memcached插件,...
本文实例讲述了Memcached缓存系统的介绍、安装以及应用方法。分享给大家供大家参考,具体如下: 一. memcached 是什么? memcached is a high-performance, distributed memory object caching system, generic in ...
PHP中有eAccelerator、memcached、xcache、APC 4个加速、缓存扩展,下面给大家介绍下其区别,一起看看吧! 折腾VPS的朋友,在安装好LNMP等Web运行环境后都会选择一些缓存扩展安装以提高PHP运行速度,常被人介绍的...
Redis 是一个开源、支持网络、基于内存、键值对的 Key-Value 数据库,本篇文章主要介绍了Redis 对比 Memcached 并在 CentOS 下进行安装配置详解,有兴趣的可以了解一下。 了解一下 Redis Redis 是一个开源、支持网络...
1、启动Memcache 常用参数复制代码 代码如下:-p <num> 监听的TCP端口(默认: 11211)-U <num> UDP监听端口 (默认: 11211, 0 时关闭)-d 以守护进程方式运行-u <username> 运行运行 Memcached的账户 非root用户-m <num> ...
发送到memcached之前对数据的可选压缩网络错误或超时时自动重新连接支持发送任意命令。 在阅读。 支持存储string , numeric和JSON值API支持回调或Promise 支持开火和忘记请求支持多种连接配套此使用来管理多个...
内容:以Nginx中的Memcached模块的使用的两大场景为例,展现Memcached模块的使用特点。 12、高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题 内容:续该系列博文中的第...
安装完成后,使用如下命令启动: $ sudo memcached -m 32 -p 11211 -d 安装php扩展 使用php操作memcache前,需要安装php的扩展,php的扩展有两个可以选择memcache和memcached,这里就安装比较经典的前者。从这里...
3.4.3 对memcached_functions_mysql的简单功能进行测试 3.4.4 使用memcached_functions_mysql的经验与技巧 3.5 本章小结 第2篇 数据备份恢复篇 第4章 开源网络备份软件bacula 4.1 bacula总体概述 4.1.1...
添加数据类型'exstrtype',和原始字符串分类,其值上可以指定版本,从而可以方便的实现分布式锁等功能,同时值上还可以设置标记,以支持memcached协议CAS / CAD-Redis原生字符串的增强命令详解中国科学院语法及...
如果认为它是一个可以持久化的cache, 可能只是用它保存一些频繁访问的临时数据(代替Memcached);除此之外,还可以把Redis当做一个轻量级的消息队列使用,因为它内置就支持 list数据结构和PUB/SUB命令;还可以当做...
memcached(十七)协议命令格式 nginx大流量负载调优 12306的技术革命 利用ElasticSearch和Redis检索和存储信息 程序人生 潜入蓝翔技校二十天,探究蓝翔黑客真正的奥秘 [评论]全栈工程师到底有什么用 软件开发中...
这意味着Redis通过一组命令提供对可变数据结构的访问,这些命令是使用带有TCP套接字和简单协议的服务器-客户端模型发送的。 因此,不同的进程可以以共享的方式查询和修改相同的数据结构。 在Redis中实现的数据结构...
2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? 6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 Windows 版本? 8、...
Memcached Douban API 搜索引擎 使用 Solr 实现搜索功能。 Scanffold 命令创建后台 rails g scaffold_controller admin/movies title:string year:integer alias_list:string director_list:string actor_list:...