php和redis实现加解锁的方法
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关php和redis实现加解锁的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。业务背景:在房间棋牌游戏中需要用到锁来防止并发操作引起的
千家信息网最后更新 2026年11月03日php和redis实现加解锁的方法
这篇文章将为大家详细讲解有关php和redis实现加解锁的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
业务背景:在房间棋牌游戏中需要用到锁来防止并发操作引起的 redis 数据脏读问题;例如添加用户进入房间的动作:

并发的情况下,get RoomUsers 会有脏读现象;
解决思路:加锁房间来实现 一个房间每次只允许一个客户端操作,其他并发客户端则等待;也就是-----堵塞锁;
加锁:redis加锁方式有几种: incr、set、setnx、hSetnx,可以参考这篇文章:redis加锁的几种实现
这里我用到 set 这种方式
$roomId = $_GET['roomId'];$user = $_GET['user']; // '张三'$key = "LockRoom:{$roomId}";$value = $roomId.uniqid();$ex = 3;// 如果 $key 不存在的话,就设置 $key 的值为 $value,且有效期为 3s; // return TRUE / FALSEwhile(true){ $res = $this->redis->set($key, $value, ['nx', 'ex' => $ex]); if($res) { break; } usleep(5000);}// 将用户添加进房间$roomUsers = $this->redis->get("Room:{$roomId}:Users"); // ['李四', '王五']$roomUsers[] = $user;$this->redis->set("Room:{$roomId}:Users", $roomUsers); // ['李四', '王五', '张三']解锁:操作完当然要解锁了,不解锁起码要等待 3秒;
解锁用 delete 删除 key; 但是这里有个坑,不能直接用 delete,因为假设 client01 获得了锁,在添加用户进入房间的过程中 时间超过了 3秒 ,这个时候client02 就会同样获得锁并且设置3S,然后当client01 操作完之后 delete key , 就把 client02 设置的锁删除了;
这里推荐用 lua 代码执行删除,因为lua 执行具有原子性。
// 将用户添加进房间$roomUsers = $this->redis->get("Room:{$roomId}:Users"); // ['李四', '王五']$roomUsers[] = $user;$this->redis->set("Room:{$roomId}:Users", $roomUsers); // ['李四', '王五', '张三']// lua 脚本解锁// 先判断 key的值是否为 value, TRUE 才会删除, 所以 $value 的设计要有随机唯一性$script = 'if redis.call("get",KEYS[1]) == ARGV[1]then return redis.call("del",KEYS[1])else return 0end ';$this->redis->eval($script, array($key , $value), 1);关于php和redis实现加解锁的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
房间
用户
李四
王五
篇文章
张三
方法
客户
客户端
方式
更多
参考
不错
实用
有效
业务
也就是
代码
内容
动作
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
瑰夏咖啡
中国互联网科技工作委员会毛军
科技互联网政务服务
河南真二互联网科技有限公司
麻工互联网科技
深圳互联网科技公司
互联网与新科技
互联网科技论文
互联网科技logo
左右互联网络科技
青海省互联网新科技
银川新华互联网科技学校地址
崇明区互联网教育科技诚信经营
黑科技闪耀互联网之光
中国航天科技大学国际工业互联网
新兴科技互联网创新大赛颁奖典礼
朱啸虎曾投资哪些互联网科技企业
怎样加入科技互联网
35岁以上互联网科技行业
安徽零酒互联网科技有限公司
耶加雪菲
互联网科技媒体
博兴的互联网电子科技公司
互联网科技实习生岗位职责
重庆威客帮互联网科技
知域互联网科技有限公司大骗子
广州市恰铎互联网科技有限公司
亳州好赞互联网科技有限公司
领航科技大厦互联网公司
科技美学互联网 艺术