欢迎投稿

今日深度:

memcached几个容易被忽略但非常有用的命令,memc

memcached几个容易被忽略但非常有用的命令,memcached几个忽略


最近通读了一遍memcached的源码,在这个过程中发现了许多memcached平时没有注意不常用到的命令,但是经常在使用或运维memcached的时候会碰到正好能用到这些命令的需求,只是当时受限于所用的memcached 版本或memcached client或其他原因,不知道memcached还有这些用法,现在给大家分享一下。


一、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操作,最后一位要指定版本号,当本地版本号和服务器版本号相同的时候,更新才会有效
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中数据的情况。



oracle创建表空间的问题 未知的命令开头,忽略了剩余的行

CREATE TABLESPACE
TB_COGNOS LOGGING DATAFILE 'D:\Oracle_DataFile\COG\dat_cog.dbf' SIZE 32m
AUTOEXTEND ON NEXT 32m MAXSIZE 2048m EXTENT MANAGEMENT LOCAL;

create和tablespace中间要有空格
 

BAT命令在XP系统下复制文件到新的文件夹怎忽略相同更改时间

代码如下:
::═════代═══码═══开═══始═════
@echo off&setlocal enabledelayedexpansion
cd/d "D:\My Documents\音乐"
for /f "delims=" %%i in ('dir /a-d/b *.mp3') do (
if exist "F:\音乐\MP3\%%i" (
for /f "delims=" %%a in ("F:\音乐\MP3\%%i") do (
if not "%%~ta"=="%%~ti" copy /y "%%i" "%%a")) else (
copy /y "%%i" "F:\音乐\MP3\%%i"))
pause
::Created By escortmnm from VBS团队
::═════代═══码═══结═══束═════
修改时间精确到秒。

如果目标文件夹是作为备份,原始文件夹始终是最新的,也可以使用下面的代码:
::═════代═══码═══开═══始═════
@echo off
xcopy /D/I "D:\My Documents\音乐\*.mp3" "F:\音乐\MP3\"
PAUSE
::═════代═══码═══结═══束═════
不过,还是第一个代码最有效。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/2102.html NewsArticle memcached几个容易被忽略但非常有用的命令,memcached几个忽略 最近通读了一遍memcached的源码,在这个过程中发现了许多memcached平时没有注意不常用到的命令,但是经常在使用或运维memca...
评论暂时关闭