/*** 分布式锁* @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;
}

简单分布式锁实现(拍黄片)相关推荐

  1. redis简单分布式锁实现 超简单的那种

    1.下载安装启动redis 网上教程很多 不说了 2. 先创建一个简单的Springcloud项目 <?xml version="1.0" encoding="UT ...

  2. Go使用redigo实现简单分布式锁

    redis分布式锁是 基于setnx的 只在键 key 不存在的情况下, 将键 key 的值设置为 value . 若键 key 已经存在, 则 SETNX 命令不做任何动作. SETNX 是『SET ...

  3. 什么是锁PHP,PHP简单分布式锁-PHP中的锁

    对于PHP的锁,其实并没有什么太多的概念.抛弃一些第三方的依赖,看看有哪些可用的选择. 文件锁 PHP的sync扩展 PHP的opcache中的apc_add 目前可以想到的就这么多,在该项目中我们采 ...

  4. redis做分布式锁可能不那么简单

    在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程 ...

  5. 程序员修神之路--redis做分布式锁可能不那么简单

    点击上方"蓝字"带你去看小星星 菜菜哥,复联四上映了,要不要一起去看看? 又想骗我电影票,对不对? 呵呵,想去看了叫我呀 看来你工作不饱和呀 哪有,这两天我刚基于redis写了一个 ...

  6. 服务注册发现consul之四: 分布式锁之四:基于Consul的KV存储和分布式信号量实现分布式锁...

    一.基于key/value实现 我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如: ...

  7. nx set 怎么实现的原子性_基于Redis的分布式锁实现

    前言 本篇文章主要介绍基于Redis的分布式锁实现到底是怎么一回事,其中参考了许多大佬写的文章,算是对分布式锁做一个总结 分布式锁概览 在多线程的环境下,为了保证一个代码块在同一时间只能由一个线程访问 ...

  8. 深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!

    ‍‍‍‍‍‍‍‍‍‍‍‍阅读本文大约需要 20 分钟. 大家好,我是 Kaito. 这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题. Redis 分布式锁的话题,很多文章已经写烂了 ...

  9. 基于Consul的分布式锁实现

    我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现.基于Zoo ...

最新文章

  1. vue 判断一个数是否在数组中_高级前端进阶,vue如何实现$nextTick
  2. CentOS下桥接模式连不上网
  3. MongoDB 复制集节点增加移除及节点属性配置
  4. Ruby设计模式透析之 —— 组合(Composite)
  5. 【链表】判断一个链表是否是回文链表
  6. C# async/await 使用总结
  7. Google AdSense注册流程
  8. MIPS计算公式总结
  9. 置换和轮换(新姿势,摘自黑书)
  10. 鼠标右键转圈圈_【鼠标右键一直在转圈圈】鼠标右键一直在闪_鼠标一直在转圈圈...
  11. java.lang.IllegalArgumentException: Address 127.0.0.1:5672:5672 seems to contain an unquoted IPv6
  12. HTML+CSS十分钟实现响应式布局页面,响应式布局实战教程
  13. Sen2Cor对哨兵2号L1C数据的预处理
  14. rls算法matlab实现,第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现.PDF
  15. 五国启动税务执法联盟以解决加密货币网络犯罪威胁
  16. linux服务器被挖矿的解决办法
  17. 天堂2服务器维护,天堂II-官方网站-腾讯游戏
  18. How to speed my too-slow ssh login?
  19. 深入浅出原核基因表达调控(乳糖操纵子、色氨酸操纵子)
  20. 在tinycolinux上安装sandstorm davros

热门文章

  1. 虚拟机概论(六)——JAVA虚拟机模型 (转载)
  2. 最老程序员创业开发实训2---采用MVC架构的应用Splash页面实现
  3. 三维立体切块效果制作
  4. Kibana原型污染导致远程执行代码 CVE-2019-7609 漏洞复现
  5. 为什么说真正的高手都有窄门思维?
  6. 另一程序正在使用此文件,进程无法访问
  7. 裁判文书关键信息提取
  8. 虾皮怎么注册开店,开一个属于你的优质店铺
  9. Dvorak Simplified Keyboard
  10. python枪战项目计划书_用python分析了20万场吃鸡数据