博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis 实现分布式锁
阅读量:6322 次
发布时间:2019-06-22

本文共 878 字,大约阅读时间需要 2 分钟。

  hot3.png

redis 实现分布式锁 伪代码

 

lock(){if(jedis.setNx("key",timestamp)){   locktime = timestamp; //获得锁的时间   ..dosth       .      unlock(locktime)}else{  locktime = jedis.get(timestamp)  if(locktime > timeout){ //锁时间超时     lasttime = jedis.getset("key",timestamp)     if(lasttime > timeout){ //再次取出锁时间,若还是超时, 表示此期间没有其他竞争,getset已获取锁       locktime = timestamp; //获得锁的时间       ..dosth              unlock(locktime)     }else{ //再次取出锁, 若未超时,表示此期间有其他竞争已拿到锁,等待       wait();       lock();             }  }else{     wait(); //未获得锁, 锁也未超时 , 等待一会再次尝试获取锁     lock()  }}}unlock(locktime){ if(locktime > timeout){//超时    currentlocktime = jedis.get(key) //取出当前锁的时间    if(locktime != currentlocktime){  //两个时间不一样,证明期间有其他竞争拿到超时锁 , 什么也不干,不要动别人的东西       }else{//两个时间一样,超时锁没被抢走, 此时可能并没有那么大的并发 , 可以什么也不干 , 也可以del key      }  } else {  //锁未超时 ,锁在我手 ,直接del   del(key)}}

 

转载于:https://my.oschina.net/bihu/blog/853629

你可能感兴趣的文章
zabbix监控安装与配置
查看>>
python 异常
查看>>
可执行程序找不到lib库地址的处理方法
查看>>
Richard M. Stallman 给《自由开源软件本地化》写的前言
查看>>
rhel6下安装配置Squid过程
查看>>
在 Linux 下使用 fdisk 扩展分区容量
查看>>
如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
查看>>
Delphi 操作Flash D7~XE10都有 导入Activex控件 shockwave
查看>>
oracle 学习笔记之名词解释
查看>>
MySQL Cluster搭建与测试
查看>>
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Shredding Company 碎纸机,dfs()枚举每一种情况,再加剪枝。
查看>>
结构化程序设计03 - 零基础入门学习Delphi12
查看>>
STM32的TAMPER-RTC管脚作为Tamper的使用[转]
查看>>
[记]一个逐步“优化”的范例程序
查看>>
2012-01-09_2
查看>>
数学 - 线性代数导论 - #5 矩阵变换之置换与转置
查看>>
java数据结构:队列
查看>>