memcached锁的实现 cas协议

1.事例:

image.png

这里$cas可以理解为获取'ip_block'那时的一个版本号标记,引用类型输出
然后在cas() 方法中将这个标记放入检测,如果版本号没变,则可以处理数据,版本号改变则返回失败。(类似于redis中的watch事务检测)

2.memcached 中 add 、 set 、replace 的区别

memcache::add 方法:add方法用于向memcache服务器添加一个要缓存的数据。
memcache::set 方法:set方法用于设置一个指定key的缓存内容,set方法是add方法和replace方法的集合体
mmecache::replace方法: replace方法用于替换一个指定key的缓存内容,如果key不存在则返回false

比较:
方法 当key存在 当key不存在
add false true
replace 替换(true) false
set 替换(true) true

3.Memcached gets 命令

Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。

4.Memcached CAS 命令

Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作
它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。
检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值。

要在 Memcached 上使用 CAS 命令,你需要从 Memcached 服务商通过 gets 命令获取令牌(token)。

gets 命令的功能类似于基本的 get 命令。两个命令之间的差异在于,gets 返回的信息稍微多一些:64 位的整型值非常像名称/值对的 "版本" 标识符。

你可能感兴趣的:(memcached锁的实现 cas协议)