zoukankan      html  css  js  c++  java
  • 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中数据的情况。


  • 相关阅读:
    关于ubantu在VMWARE里安装时出现'SMBus Host Controller not enabled'
    临时备忘录
    第七届 山东ACM热身赛 Dwarf Tower
    数学问题题目连接
    蓝桥杯2016决赛 凑平方数
    博弈整理(取物)
    格子刷油漆(DP)
    蓝桥杯第六届总决赛B组
    蓝桥杯第五届决赛B组
    蓝桥杯第四届总决赛
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5267863.html
Copyright © 2011-2022 走看看