Memcached的前台启动
memcached -p 11211 -m 64m -vv -u root
作为daemon后台启动
memcached -p 11211 -m 64m -vv -u root -d
-u选项只有在root用户下才使用
连接Memcached服务
memcached
的服务器客户端通信
并
不使用复
杂
的XML
等格式,而使用简单的基于
文
本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据。
telnet 服务器IP 端口号
如:
[root@localhost ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
<36 new auto-negotiating client connection
Connected to 127.0.0.1.
Escape character is '^]'.
set zhou 0 100 3
36: Client using the ascii protocol
<36 set zhou 0 100 3
xin
>36 STORED
STORED
get zhou
<36 get zhou
>36 sending key zhou
>36 END
VALUE zhou 0 3
xin
END
Memcached的操作命令
存储:set, add, replace, incr, decr, append, prepend, cas
删除:delete, flush_all
查找:get, gets
统计:stats, stats items, stats slabs, stats sizes
Memcached的cas
(Check-And-Set 或 Compare-And-Swap)
命令
假设有下列情形:
第一步,A取出数据对象X;
第二步,B取出数据对象X;
第三步,B修改数据对象X,并将其放入缓存;
第四步,A修改数据对象X,并将其放入缓存。
则,我们可以发现,第四步中会产生数据写入冲突。因为B写的数据被A改了,而B并不知道这一点。所以应该禁止这种情况发生。
第二步,B取出数据对象X;
第三步,B修改数据对象X,并将其放入缓存;
第四步,A修改数据对象X,并将其放入缓存。
则,我们可以发现,第四步中会产生数据写入冲突。因为B写的数据被A改了,而B并不知道这一点。所以应该禁止这种情况发生。
如果采用了CAS协议,则变成了下列情形:
第一步,A取出数据对象X,并获取到CAS-ID;
第二步,B取出数据对象X,并获取到CAS-ID;
第三步,B修改数据对象X,在写入缓存前,检查CAS-ID与缓存空间中该数据的CAS-ID是否一致。结果是“一致”,就将修 改写入缓存并更新CAS-ID为CAS-ID1。
第四步,A修改数据对象X,在写入缓存前,检查CAS-ID与缓存空间中该数据的CAS-ID1是否一致。结果是“不一致”,则 拒绝写入,返回存储失败。
第二步,B取出数据对象X,并获取到CAS-ID;
第三步,B修改数据对象X,在写入缓存前,检查CAS-ID与缓存空间中该数据的CAS-ID是否一致。结果是“一致”,就将修 改写入缓存并更新CAS-ID为CAS-ID1。
第四步,A修改数据对象X,在写入缓存前,检查CAS-ID与缓存空间中该数据的CAS-ID1是否一致。结果是“不一致”,则 拒绝写入,返回存储失败。
所以,CAS命令仅在当前客户端最后一次取值后到修改该key时,这中间的时间段内该key没有被其他客户端修改的情况下, 才能够将值写入。