当前位置:网站首页>Laravel 实现redis分布式锁
Laravel 实现redis分布式锁
2022-08-04 23:06:00 【陈卿诺语】
Redis几种架构
Redis发展到现在,几种常见的部署架构有:
单机模式;
主从模式;
哨兵模式;
集群模式;
从分布式锁的角度来说, 无论是单机模式、主从模式、哨兵模式、集群模式,其原理都是类同的。 只是主从模式、哨兵模式、集群模式的更加的高可用、或者更加高并发。
所以,接下来先基于单机模式,基于Jedis手工造轮子实现自己的分布式锁。
首先看两个命令:
Redis分布式锁机制,主要借助setnx和expire两个命令完成。
setnx命令:
SETNX 是SET if Not eXists的简写。将 key 的值设为 value,当且仅当 key 不存在; 若给定的 key 已经存在,则 SETNX 不做任何动作。
下面为客户端使用示例:
127.0.0.1:6379> set lock "unlock"
OK
127.0.0.1:6379> setnx lock "unlock"
(integer) 0
127.0.0.1:6379> setnx lock "lock"
(integer) 0
127.0.0.1:6379>
expire命令:
expire命令为 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 其格式为:
EXPIRE key seconds
下面为客户端使用示例:
127.0.0.1:6379> expire lock 10
(integer) 1
127.0.0.1:6379> ttl lock
8
$lock = Redis::setnx('cqny',5,1);
if(!$lock) return $this->apiError('操作太频繁了');
Redis::expire('cqny',10);
$block = Cache::lock("GoodLock",10); //返回一个redis对象
if ($block){
// Todo 业务逻辑
sleep(10);
echo "业务逻辑<br>";
$block->release(); // 释放锁
return "秒杀成功";
}
return 12;
$suo = Redis::set('123',123,"nx","ex",5);
if ($suo) Redis::del('123');
边栏推荐
- PID控制器改进笔记之七:改进PID控制器之防超调设定
- 文献阅读十——Detect Rumors on Twitter by Promoting Information Campaigns with Generative Adversarial Learn
- 【转载】kill掉垃圾进程(在资源管理器占用的情况下)
- 地面高度检测/平面提取与检测(Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Clu)
- Shell编程之循环语句与函数的使用
- 未上市就“一举成名”,空间媲美途昂,安全、舒适一个不落
- typeScript-promise
- 文章占位 文章占位
- 剑指Offer | 数值的整数次方
- Linear DP (bottom)
猜你喜欢
随机推荐
Both synchronized and ReentrantLock are smooth, because they are reentrant locks, and a thread will not deadlock if it takes the lock multiple times. We need reentrant locks
If you can't get your heart, use "distributed lock" to lock your people
一点点读懂cpufreq(二)
Linux系统重启和停止Mysql服务教程
Redis understanding
956. 最高的广告牌
Jbpm3.2 开发HelloWorld (简单请假流程)客户端
【游戏建模模型制作全流程】ZBrush蜥蜴模型雕刻教程
One trick to cure pycharm DEBUG error UnicodeDecodeError: 'utf-8' codec can't decode
kernel hung_task死锁检测机制原理实现
[Paper Notes KDD2021] MixGCF: An Improved Training Method for Graph Neural Network-based Recommender Systems
请你说一下final关键字以及static关键字
线性DP(下)
panic: reflect: reflect.Value.SetString using value obtained using unexported field
To Offer | 03. Repeat Numbers in the array
temp7777
The Go Programming Language (Introduction)
Nacos配置中心之客户端长轮询
Linear DP (bottom)
typeScript-promise