php和redis实现加解锁的方法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关php和redis实现加解锁的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。业务背景:在房间棋牌游戏中需要用到锁来防止并发操作引起的
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
科技互联网
互联网加科技
广东万易互联网科技有限公司惠州分公司
涨乐互联网科技
互联网品科技
碳银互联网科技
朗涯互联网科技
苏州互联网科技贷款公司
碳银互联网科技有限公司
兼蜜互联网科技
互联网科技美容
互联网高科技股票
科技赋能互联网健康
成都互联网科技公司100强
金融科技与互联网金融相同和不同
宁夏众和广鑫互联网科技有限公司
链环科技传统企业怎么转型互联网
山东星卡互联网科技有限公司官网
黑云互联网科技有限公司
九思连强互联网电子科技有限公司
互联网络科技
中关村互联网 科技集团
紫鲸互联网科技
上海致骋互联网科技
猫创互联网科技
四川狮子座互联网科技
恒生科技互联网指数分析
互联网新科技动漫ppt素材
广州新华互联网科技学校电竞方面
江苏苏星互联网科技有限公司