memcached 为啥要 cas

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memcached 为啥要 cas相关的知识,希望对你有一定的参考价值。

参考技术A CAS是单点登录,memcached是缓存服务器类似redis,主要用来存放常用的变量,memcached可以存放单点登录的一些票据,这样再次登录就可以不需要登录。

memcached 乐观锁实现:cas

Memcached::cas(check and set)使用了乐观锁,避免了并发访问时可能出现的覆盖修改问题.

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

以下是使用举例,使用do,while结构及cas方法,如果cas方法

$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 );
 

 

以上是关于memcached 为啥要 cas的主要内容,如果未能解决你的问题,请参考以下文章

如果 redis 已经是堆栈的一部分,为啥 Memcached 仍然与 Redis 一起使用?

为啥 file_get_contents 比 memcache_get 快?

在php中 为啥不能使用redis类

数据库为啥要读写分离

memcache源码编译安装

php memcache分布式和要注意的问题