首页 文章 php+redis 乐观锁

php+redis 乐观锁

来源:https://www.cnblogs.com/GreenForestQuan/p/7492119.html 发布时间:2023-03-16 10:04:37 作者:Soul-Yang 阅读量:884
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。<br><br><?php
header('content-type:text/html;chaeset=utf-8');
/**
 * redis实战
 *
 * 实现乐观锁机制
 *
 * @example php optimistic-lock.php
 */
$redis new \Redis();
$redis->connect('127.0.0.1', 6379);

*注意:这里还要注意的是,WATCH命令是不可以在事务里面使用的,也就是说,必须用在Multi命令之前,而且事务只会在提交时发生阻塞,命令入队一半不会阻塞,所以在提交之前,其他客户端是可以对任意键值对操作的,所以就会发生事务不安全,因为事务里已经不满足一致性和隔离性了

// 监视 count 值

$redis->watch('count');
// 开启事务
$redis->multi();
// 操作count
$time = time();
$redis->set('count'$time);
//-------------------------------
/**
 * 模拟并发下其他进程进行set count操作 请执行下面操作
 *
 * redis-cli 执行 $redis->set('count', 'is simulate'); 模拟其他终端
 */
sleep(10);
//-------------------------------
// 提交事务
$res $redis->exec();
if ($res) {
    // 成功...
    echo 'success:' $time;
    return;
}

// 失败...(exec 时会检测watch 的值,是否改变;如果改变了就会执行失败

echo 'fail:' $time;

  
留言
https://blog.key9.cn/
用户登录
您还没有写任何评论内容!
您已经评论过了!
只能赞一次哦!
您已经收藏啦!