一、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. 12、第十二节课,css伪类 (转)

    一.特殊选择器 1.* 用于匹配任何的标记 2.> 用于指定父子节点关系 3.E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F 4.E ~ F 匹配所有E元素之后的同级元素F 5. ...

  2. excel导入mssql数据库,支持excel2003--2010文件格式

    rt,简单的excel导入mssql.未做性能及海量数据优化,一般单表5000左右条数据导入适用. 源码非原创,来源于之前搜集整理,原作者无从考究,如有版权问题请留言注明. 看代码.前台页面是一个Fi ...

  3. 常用的CSS属性

    1.CSS背景属性(background) 属性 描述 background 在一个声明中设置所有的背景属性 background-attachment 设置背景图像是否固定或者随着页面的其余部分滚动 ...

  4. MapReduce UnitTest

    通常情况下,我们需要用小数据集来单元测试我们写好的map函数和reduce函数.而一般我们可以使用Mockito框架来模拟OutputCollector对象(Hadoop版本号小于0.20.0)和Co ...

  5. linux笔记2.25

    解决vsftpd用root登录不了的问题 把/etc/pam.d/vsftpd文件中的 auth       required    pam_listfile.so item=user sense=d ...

  6. showModalDialog-父窗体子窗体

    showModalDialog使用例子,父窗口向子窗口传递值,子窗口设置父窗口的值,子窗口关闭的时候返回值到父窗口. farther.html --------------------------- ...

  7. Python自动化运维之10、模块之json、pickle、XML、PyYAML、configparser、shutil

    序列化 Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类 ...

  8. 《python基础教程》笔记之 字典

    字典创建 字典由多个键值对组成,每个键和对应值之间用冒号隔开,项之间用逗号隔开,而整个字典用一对大括号括起来,如 >>> phonebook={'alice':'0123', 'Be ...

  9. 不要if else的编程

    http://news.cnblogs.com/n/194216/ 英文原文:Unconditional Programming ] 本文作者介绍 Michael Feathers Michael F ...

  10. C# 文件创建时间,修改时间

    System.IO.FileInfo fi = new System.IO.FileInfo(@"D:\site\EKECMS\skin\Grey\default#.html"); ...