加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

Memcached::cas 详解

发布时间:2020-05-25 06:18:11 所属栏目:PHP 来源:互联网
导读:Memcached::cas 详解

感兴趣的小伙伴,下面一起跟随脚本之家 jb51.cc的小编两巴掌来看看吧!

Memcached::cas

(PECL memcached >= 0.1.0)

Memcached::cas — 比较并交换值

说明

public bool Memcached::cas ( float $cas_token,string $key,mixed $value [,int $expiration ] )

Memcached::cas()执行一个“检查并设置”的操作,因此,它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。检查是通过cas_token参数进行的, 这个参数是Memcach指定给已经存在的元素的一个唯一的64位值, 怎样获取这个值请查看Memcached::get*() 系列方法的文档。注意:这个值作为double类型是因为PHP的整型空间限制。

译注:这是Memcached扩展比Memcache扩展一个非常重要的优势, 在这样一个系统级(Memcache自身提供)的冲突检测机制(乐观锁)下, 我们才能保证高并发下的数据安全。

参数

cas_token

与已存在元素关联的唯一的值,由Memcache生成。

key

用于存储值的键名。

value

存储的值。

expiration

到期时间,默认为 0。 更多信息请参见到期时间。

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE。 如果在元素尝试存储时发现在本客户端最后一次获取后被其他客户端修改,Memcached::getResultCode() 将返回Memcached::RES_DATA_EXISTS。

范例

Example #1 Memcached::cas() 示例


<?php
$m = new Memcached();
$m->addServer('localhost',11211);
do {
    /* 获取ip列表以及它的标记 */
    $ips = $m->get('ip_block',null,$cas);
    /* 如果列表不存在, 创建并进行一个原子添加(如果其他客户端已经添加, 这里就返回false)*/
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $ips = array($_SERVER['REMOTE_ADDR']);
        $m->add('ip_block',$ips);
    /* 其他情况下,添加ip到列表中, 并以cas方式去存储, 这样当其他客户端修改过, 则返回false */
    } else { 
        $ips[] = $_SERVER['REMOTE_ADDR'];
        $m->cas($cas,'ip_block',$ips);
    }   
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>

# End www.jb51.cc

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读