简单分布式锁实现(拍黄片)
/*** 分布式锁* @param $key* @param $fn* @param int $expires* @param int $tryTimes* @param int $code* @param string $msg* @return mixed* @throws ApiException*/ public function distributeLock($key, $fn, $expires = 5, $tryTimes = 2, $code = 999, $msg = '请求太频繁,稍后再试!') {try {if (!is_callable($fn, true)) {throw new ApiException('抱歉,第二个入参[$fn]必须为函数!!', -1);}$try = 0;while (true) {if ($this->redis->set($this->formatKey($key), 1, ['nx', 'ex' => $expires])) {break;}if ($try > $tryTimes) {throw new \Exception($msg, $code);}$try++;usleep(50000);//休眠50毫秒}$result = call_user_func($fn);$this->del($key);} catch (\Exception $e) {if ($e instanceof ApiException) {$this->del($key);} else {DI()->logger->error(__METHOD__, ['key' => $key, 'code' => $e->getCode(), 'msg' => $e->getMessage()]);}throw new ApiException($e->getMessage(), $e->getCode());}return $result; }
简单分布式锁实现(拍黄片)相关推荐
- redis简单分布式锁实现 超简单的那种
1.下载安装启动redis 网上教程很多 不说了 2. 先创建一个简单的Springcloud项目 <?xml version="1.0" encoding="UT ...
- Go使用redigo实现简单分布式锁
redis分布式锁是 基于setnx的 只在键 key 不存在的情况下, 将键 key 的值设置为 value . 若键 key 已经存在, 则 SETNX 命令不做任何动作. SETNX 是『SET ...
- 什么是锁PHP,PHP简单分布式锁-PHP中的锁
对于PHP的锁,其实并没有什么太多的概念.抛弃一些第三方的依赖,看看有哪些可用的选择. 文件锁 PHP的sync扩展 PHP的opcache中的apc_add 目前可以想到的就这么多,在该项目中我们采 ...
- redis做分布式锁可能不那么简单
在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程 ...
- 程序员修神之路--redis做分布式锁可能不那么简单
点击上方"蓝字"带你去看小星星 菜菜哥,复联四上映了,要不要一起去看看? 又想骗我电影票,对不对? 呵呵,想去看了叫我呀 看来你工作不饱和呀 哪有,这两天我刚基于redis写了一个 ...
- 服务注册发现consul之四: 分布式锁之四:基于Consul的KV存储和分布式信号量实现分布式锁...
一.基于key/value实现 我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如: ...
- nx set 怎么实现的原子性_基于Redis的分布式锁实现
前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问 ...
- 深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!
阅读本文大约需要 20 分钟. 大家好,我是 Kaito. 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题. Redis 分布式锁的话题,很多文章已经写烂了 ...
- 基于Consul的分布式锁实现
我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现.基于Zoo ...
最新文章
- vue 判断一个数是否在数组中_高级前端进阶,vue如何实现$nextTick
- CentOS下桥接模式连不上网
- MongoDB 复制集节点增加移除及节点属性配置
- Ruby设计模式透析之 —— 组合(Composite)
- 【链表】判断一个链表是否是回文链表
- C# async/await 使用总结
- Google AdSense注册流程
- MIPS计算公式总结
- 置换和轮换(新姿势,摘自黑书)
- 鼠标右键转圈圈_【鼠标右键一直在转圈圈】鼠标右键一直在闪_鼠标一直在转圈圈...
- java.lang.IllegalArgumentException: Address 127.0.0.1:5672:5672 seems to contain an unquoted IPv6
- HTML+CSS十分钟实现响应式布局页面,响应式布局实战教程
- Sen2Cor对哨兵2号L1C数据的预处理
- rls算法matlab实现,第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现.PDF
- 五国启动税务执法联盟以解决加密货币网络犯罪威胁
- linux服务器被挖矿的解决办法
- 天堂2服务器维护,天堂II-官方网站-腾讯游戏
- How to speed my too-slow ssh login?
- 深入浅出原核基因表达调控(乳糖操纵子、色氨酸操纵子)
- 在tinycolinux上安装sandstorm davros