一、CAS和GETS

Memcached从1.2.4版本号新增CAS(Check and Set)协议,用于处理同一个ITEM(key-value)被多个session更新改动时的数据一致性问题。

如果有两个session(A、B)。要同一时候改动某个key的值x,而且改动的数据是基于原来数据的一个计算的结果。session A和B同一时候得到了key的值x,session A经过计算后应该更新为y,session B经过计算后也更新为y,可是session
B事实上期望的是拿到y值,并将其计算为Z后更新。

造成这个问题的解决办法就是缺少一个类似于MySQL的事务,用于数据并发改动的一致性问题。

CAS命令着眼于解决一定的并发改动问题,引入了

fr=aladdin" style="font-family:Helvetica,Tahoma,Arial,sans-serif; line-height:25.200000762939453px">乐观锁的概念。在试图改动某个KEY的值之前,先由GETS命令得到某个KEY的值及其版本。完毕数据操作更新数据时。使用CAS慎重更新,比較版本是否与本地的版本一致,否则放弃此次的改动。

Memcached在默认开启CAS协议后,每一个key关联有一个64-bit长度的long型惟一数值。表示该key相应value的版本。

这个数值由Memcached
server产生。从1開始,且同一Memcached server不会反复。在两种情况下这个版本号数值会加1:

1、新增一个key-value对;

2、对某已有key相应的value值更新成功。删除item版本号值不会减小。

首先为了获得KEY值的版本,引入了GETS命令,能够发现GETS命令比GET命令多返回了一个数字,这个数字就是上面我们提到的KEY值的版本。

然后是CAS命令。与SET命令类似,仅仅是在最后面多了一个參数,也就是key值得版本。仅仅有版本与存储的数据版本一致时,更新操作才会生效。

set a 0 0 1
x
STORED gets a
VALUE a 0 1 1 //最后一位就是a的版本
x
END set a 0 0 1
y
STORED gets a
VALUE a 0 1 2 //新增或改动之后。版本都会添加
y cas a 0 0 1 1 //cas更新的时候。不同于set操作。最后一位要指定版本,当本地版本和server版本同样的时候,更新才会有效
x
EXISTS cas a 0 0 1 2
y
STORED

二、stats items和stats cachedump

你以前是否也有想知道memcached里面都存了哪些数据的需求,你是否也以前在寻找一个方法能像redis一样能够遍历memcached全部的key

事实上就是应用我们平时经经常使用到的stats方法。stats方法不仅能获得memcached的一个概况信息,假设加上子命令还能够获得很多其它的更加具体的信息。如slabs,items等。

stats items命令,能够获得memcached内item组的相关信息,如分组内item的数量,踢掉次数等。

后面执行cachedump命令的时候会用到这个命令的返回信息(item组序号)。

stats cachedump命令,能够将某个slab中的items所有dump出来。第一个參数就是上面stats items返回的items组号,也就是slab的编号,第二个參数为一次显示多少个item信息,假设为0就显示这个item组的所有items,第二列就是key。

stats items
STAT items:1:number 3
STAT items:1:age 943
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
END stats cachedump 1 0
ITEM c [5 b; 1405246917 s]
ITEM b [1 b; 1405246917 s]
ITEM a [1 b; 1405246917 s]
END

尽管应用这两个命令并不能一次显示所有的key,可是假设我们自己依据stats items的返回值自己做一次迭代,或者不过为了手动做几个item的抽样,那么就能非常好的帮助我们了解memcached中数据的情况。

memcached几个easy被忽略但很实用的命令的更多相关文章

  1. 正确Linux新手很实用20命令

     //正确Linux新手很实用20命令 //slwang  2014.4.19 1, ls list directory contents 内容 ls -l     //以详情模式(long li ...

  2. 分享15款很实用的 Sass 和 Compass 工具

    Sass 是 CSS 的扩展,增加了嵌套规则,变量,混入功能等很多更多.它简化了组织和维护 CSS 代码的成本.Compass 是一个开源的 CSS 框架,使得使用 CSS3 和流行的设计模式比以往任 ...

  3. linux非常用但很有用的命令

    查找指定目录下包含指定字符串的所有文件 grep -rl 'abc' / top查看命令的完整启动路径 top 按c top以MB为单位显示内存信息 top -M 查看内存top io趋势 pidst ...

  4. linux不常用但很有用的命令(持续完善)

    Linux登录后设置提示信息: /etc/issue 本地端登录前显示信息文件 /etc/issue.net 网络端登录前显示信息文件 /etc/motd 登陆后显示信息文件 可以添加以下几个常用选项 ...

  5. 45个很实用的 Oracle 查询语句小结

     这里我们介绍的是 40+ 个很实用的 Oracle 查询语句,主要涵盖了日期操作,获取server信息.获取运行状态.计算数据库大小等等方面的查询. 这些是全部 Oracle 开发人员都必备的技 ...

  6. 很实用的50个CSS代码片段

    原文:50 Useful CSS Snippets Every Designer Should Have          面对每年如此多的 新趋势 ,保持行业的率先是个非常困难问题. 站点设计者和前 ...

  7. ElasticSearch 5学习(5)——第一个例子(很实用)

    想要知道ElasticSearch是如何使用的,最快的方式就是通过一个简单的例子,第一个例子将会包括基本概念如索引.搜索.和聚合等,需求是关于公司管理员工的一些业务. 员工文档索引 业务首先需要存储员 ...

  8. Web 开发中很实用的10个效果【附源码下载】

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  9. 【工匠大道】一些Vim(Linux)不常见但很逼格的命令(不断更新中)

    本文地址 分享提纲: 1. :Tlist 2. :colorscheme 3. :set cursorline 4. ma 5. vim -x 6. CTRL-] 7. 折叠 8. 向别的用户终端写信 ...

随机推荐

  1. 获取web路径的几种方式

    1.string str1 = Request.ApplicationPath.ToString();           返回路径为:\HolterClientWeb 2.HttpServerUti ...

  2. PHP编写的SVN类

    <?php /** * SVN 外部命令 类 * * @author rubekid * * @todo comment need addslashes for svn commit * */ ...

  3. phpmyadmin设置id自增(AUTO_INCREMENT)(转)

    phpmyadmin设置id自增(AUTO_INCREMENT)   在A_I 前面打勾:如图 AUTO_INCREMENT =A_I 查看效果  

  4. (转)jQuery LigerUI 插件介绍及使用之ligerTree

    一,简介  ligerTree的功能列表: 1,支持本地数据和服务器数据(配置data或者url) 2,支持原生html生成Tree 3,支持动态获取增加/修改/删除节点 4,支持大部分常见的事件 5 ...

  5. 使用PHP CURL的POST数据

    使用PHP CURL的POST数据 curl 是使用URL语法的传送文件工具,支持FTP.FTPS.HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP.cur ...

  6. Android 软件盘 动态设置 layout

    总体来说分为三种方法: 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: ...

  7. DHCP租约时间工作原理

    问题:    很多用户在使用路由器的DHCP服务器过程中都有一个疑问,DHCP有个设置项目是设置DHCP地址的租约时间,如果设置的比较短,是否会出现租约时间到了以后会重新去获取ip地址,造成用户断网? ...

  8. Y - Design T-Shirt(第二季水)

    Description Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA ...

  9. 多线程11-Semaphore信号灯

    1.概念 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制.使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数 2.案例 package org ...

  10. Android环境搭建-Eclipse-Luna

    所需软件:eclipse-jee-luna-R-win32-x86_64 所需插件:Adt 23.02 其他:Android SDK 环境搭建-JDK安装.Eclipse安装 配置安卓环境变量: cm ...