内容简介:需求就不细说了,想必都遇到过要用数据锁的场景。看了一些资料以及其他的代码,修改记录下。基本原理就是使用 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 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- php如何实现session,自己实现session,laravel如何实现session
- AOP如何实现及实现原理
- webpack 实现 HMR 及其实现原理
- Docker实现原理之 - OverlayFS实现原理
- 为什么实现 .NET 的 ICollection 集合时需要实现 SyncRoot 属性?如何正确实现这个属性?
- 自己实现集合框架(十):顺序栈的实现
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Coding the Matrix
Philip N. Klein / Newtonian Press / 2013-7-26 / $35.00
An engaging introduction to vectors and matrices and the algorithms that operate on them, intended for the student who knows how to program. Mathematical concepts and computational problems are motiva......一起来看看 《Coding the Matrix》 这本书的介绍吧!