Redis 实现锁
导语
需求就不细说了,想必都遇到过要用数据锁的场景。看了一些资料以及其他的代码,修改记录下。
SETNX
基本原理就是使用 Redis 的 SETNX 命令来实现。
将key
的值设为 value
,当且仅当 key
不存在。若给定的 key
已经存在,则 SETNX 不做任何动作。
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。
返回值:
设置成功,返回 1
。
设置失败,返回 0
。
设置失败时,说明这个锁正在使用中。在一定时间内,循环请求,直到当前锁释放,然后获得锁
实例
<?php include 'redis.php';// 前文中连接 Redis 的方法 $redis = getRedis(); function redisLock() { $redis = getRedis(); $redisKey = 'redisKey'; $redisValue = time(); for ($i = 0; $i < 150; $i++) { $flag = $redis->setnx($redisKey, $redisValue); if (!$flag) { // 获取锁失败 usleep(200000); continue; } // 此处进行操作,操作完成后释放锁 $redis->del($redisKey); return true; } // 防止死锁,超过 5 分钟删除 if (time() - $redis->get($redisKey) > (60 * 5)) { $redis->del($redisKey); } return false; }
参考资料:SETNX。
相关推荐
王道革 2020-11-25
wangdonghello 2020-11-03
Langeldep 2020-11-16
chenhualong0 2020-11-16
聚合室 2020-11-16
koushr 2020-11-12
MRFENGG 2020-11-11
guoyanga 2020-11-10
fackyou00 2020-11-10
Orangesss 2020-11-03
dongCSDN 2020-10-31
rainandtear 2020-10-30
Quietboy 2020-10-30
liuyulong 2020-10-29
fansili 2020-10-29
温攀峰 2020-10-23
jackbon 2020-10-19
kaixinfelix 2020-10-04