内容简介:需求就不细说了,想必都遇到过要用数据锁的场景。看了一些资料以及其他的代码,修改记录下。基本原理就是使用 Redis 的 SETNX 命令来实现。设置失败时,说明这个锁正在使用中。在一定时间内,循环请求,直到当前锁释放,然后获得锁
导语
需求就不细说了,想必都遇到过要用数据锁的场景。看了一些资料以及其他的代码,修改记录下。
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 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
集创思维设计矩阵
慈思远 / 电子工业出版社 / 2017-4 / 72.00元
《集创思维设计矩阵——写给互联网人的设计指南》总结了作者从业7年以来的设计经历,在大量企业所面对的设计问题基础上,提出了枪型思维,即如何给产品更准确的定位。 在定位准确的基础上加以设计,提出了设计中高维度融合低维度的设计思维,即设计者可以从商业逻辑推演到设计逻辑,让设计更加精确;又提出了设计和计算的博弈,指出在每一步创新的基础上,设计者一定要清晰地评判设计的代价。这样设计后的产品才是可以和企......一起来看看 《集创思维设计矩阵》 这本书的介绍吧!