memcached几个easy被忽略但很实用的命令

一、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命令着眼于解决一定的并发改动问题,引入了乐观锁的概念。在试图改动某个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中数据的情况。


原文地址:https://www.cnblogs.com/mfrbuaa/p/5267863.html