首页 > 技术文章 > memcached命令

an5211 2017-04-25 21:56 原文

Memcached安装,  http://www.cnblogs.com/zgx/archive/2011/08/10/2134097.html

1. memcached是以守候程序的方式运行与一个或者多个服务器,随时等待客户端的链接,通过启动memcache服务器端,配置相应的ip、端口内存大小等参数,客户端可通过指定的服务器端ip,将数据以key-value的方式存储。

2.memcached的两阶段哈希

客户端存取数据是,首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点,客户端将请求发送给选中的节点,然后Memcached节点通过一个内部的哈希算法(阶段二哈希),进行真正的数据(item)存取

3. Memcache的服务器客户端通信并不适用复杂的xml等格式,而使用简单的基于文本行的协议,因此通过telnet也能在Memcached上保存数据,取得数据。

4.标准协议:memcached所有的标准协议包含在对item执行命令过程中,一个item包含两行:

  第一行:key  flag  expirationTime  Bytes

          key:key用于查找缓存值

          Flags:一个32位的标志值,客户机使用它存储关于键值对的额外信息(一般标识类型)

          Expiration time:在缓存中保存键值对的时长(以秒位单位,0表示永远(30天)(关了也                     就没了,因为在内存中))

          Bytes:在缓存中存储的字节数

 第二行:value:存储的值(始于第二行)

add k1 1 0 2

stored

4. noreply:可以在命令的第一行后面加入noreply,以避免在处理交互命令的时候,等待服务端返回  

add  k3 1 60 2 noreply

11

//没有stored

 5. memcached写入值

命令有:set,add,replace,append,prepend,cas

①set:用于向缓存中添加新的键值对,如果键已经存在,则之前的值将被替换

②add:仅当缓存中不存在键时,add命令才会向缓存中添加一个键值对,如果缓存中已经存在键,则之前的值将仍然保持,服务器响应NOT_STORED

③replace:仅当键已经存在时,replace命令才会替换缓存中的键,如果缓存不存在键,服务器响应not_stored

④append:是在现有缓存中数据后追加数据,如果key中没有,则返回not_stored

⑤prepend:前追加

⑥cas(check and set):检查和更新,只有从你读取的数据后,别人没有更新这个数据,才能够正确保存。就是版本控制,通常和gets配合使用,缓存中没有key的话,就会返回not_found

-------------------------------

gets k1

value  k1 0  4  8    //8指版本号

23

---------------------------------------

cas  k1  0  4  7    //7表示版本号,因为最新版本是8,所以修改失败,返回exits

5

exits

-----------------------

cas  k1  0  4  9   //9表示版本号,因为最新版本是8,只有和最新版本一样才允许修改,修改之后版本号为9,所以修改失败,返回exits

5

exits

-----------------------

  

6. get:获取相关数据   gets:获取数据+版本号

7. 删除命令:delete 

  delete k1

  DELETE

8.incr/decr命令:如果缓存数据中存储的是数字形式的字符串,则可以使用incr/decr 对数据进行递增和递减操作,操作后的值不会为负数。

9. stats命令:查询服务器的运行状态和其他内部数据,包含如下这些:

①pid:服务器进程id

②uptime:服务器运行时间,单位秒

③time:服务器当前unix时间

④version:服务器的版本号

⑤libevent:libevent的版本

⑥pointer_size:服务器操作系统位数

⑦rusage_user:该进程累计的用户时间         

⑧rusage_system:该进程累计的系统时间                 分析cpu占用是否高

⑨curr_connections:当前连接数

⑩total_connections:服务器启动后总连接数             分析连接数是否过多

⑪connection_structures:服务器分配的连接结构的数量

⑫reserved_fds:内部使用的misc fds数量

⑬cmd_get:获取请求的数量

⑭get_hits:获取成功的总次数,命中次数

⑮get_misses:获取失败的总次数                             分析命中率 

⑯cmd_set:存储请求数量

⑰cmd_flush:flush请求的数量

⑱cmd_touch:touch请求的数量

⑲delete_misses:删除失败次数

⑳delete_hits:删除命中

⑪bytes:已用缓存空间

⑫bytes_read:总共获取的数据量

⑬bytes_written:总写入数据量             //分析字节数流量,分析空间大小

⑭limit_maxbytes:总允许写入的数据量,和分配的内存有关

⑯accepting_conns:允许的总连接数

curr_items:当前缓存item数量

total_items:从服务启动后,总的存储缓存item的数量

evictions:通过删除item释放内存的次数                                  分析对象LRU频率

 

隐含的关系:

1. 缓存命中率:get_hits/cmd_get*100%

2.get_misses的数字加上get_hits应该等于cmd_get

 

10. stats sizes 命令:输出所有Item的大小和个数,注意:会锁定服务,暂停处理请求

11. flush_all命令:是内存中所有的item失效,不是真正的释放内存,而是标记为失效,加参数,n秒后

12.version,版本

13.stats setting 查看设置

14.stats_item 数据项统计

15.stats slabs 区块统计

16. 

 

推荐阅读