美文网首页Redis
Redis--分布式锁

Redis--分布式锁

作者: vsu | 来源:发表于2018-10-23 17:06 被阅读0次

2018-10-23

常用的四种方案:
1 、基于数据库表做乐观锁,用于分布式锁
增加版本号
缺点:增加了一次select版本号操作、数据库开销大、可能脏数据

2 、使用memcached的add方法,用于分布式锁
add使用时指定有效时间,发生宕机,也会释放资源,避免死锁

3 、使用redis的setnx、expire方法
同上

4 、使用redis的setnx、get、getset方法
针对上面3可能出现死锁(在expire执行前宕机)
1. setnx(lockkey, 当前时间+过期超时时间) ,如果返回1,则获取锁成功;如果返回0则没有获取到锁,转向2。
2. get(lockkey)获取值oldExpireTime ,并将这个value值与当前的系统时间进行比较,如果小于当前系统时间,则认为这个锁已经超时,可以允许别的请求重新获取,转向3。
3. 计算newExpireTime=当前时间+过期超时时间,然后getset(lockkey, newExpireTime) 会返回当前lockkey的值currentExpireTime。
4. 判断currentExpireTime与oldExpireTime 是否相等,如果相等,说明当前getset设置成功,获取到了锁。如果不相等,说明这个锁又被别的请求获取走了,那么当前请求可以直接返回失败,或者继续重试。
5. 在获取到锁之后,当前线程可以开始自己的业务处理,当处理完毕后,比较自己的处理时间和对于锁设置的超时时间,如果小于锁设置的超时时间,则直接执行delete释放锁;如果大于锁设置的超时时间,则不需要再锁进行处理。

不常用的方案:
1 使用memcached的cas方法
2 使用redis的watch、multi、exec命令
3 使用zookeeper

相关文章

  • Redis--分布式锁

    2018-10-23 常用的四种方案:1 、基于数据库表做乐观锁,用于分布式锁增加版本号缺点:增加了一次selec...

  • Redis--实现分布式锁

    Redis分布式锁实现的方式:setnx。查看redis库的源码: setnx方法只有在key不存在时才能设置成功...

  • 分布式锁

    为什么要用分布式锁 数据库乐观锁redis分布式锁zookeeper分布式锁 使用分布式锁的场景 实现分布式锁的方...

  • 什么是分布式锁?几种分布式锁分别是怎么实现的?

    一、什么是分布式锁: 1、什么是分布式锁: 分布式锁,即分布式系统中的锁。在单体应用中我们通过锁解决的是控制共享资...

  • 4:Redis 分布式锁 (文末有项目连接)

    1:什么是缓存分布式锁 2:分布式锁的关键代码 3:业务代码使用分布式缓存锁 4:业务代码使用分布式缓存锁 5:测...

  • 锁(2)-- 分布式锁

    前言: 锁分3种:java锁、分布式锁、DB锁 分布式锁的几种实现方式 目前几乎很多大型网站及应用都是分布式部署...

  • java锁的概念

    参考文档探究分布式并发锁并发编程-锁的发展和主流分布式锁比较总结从构建分布式秒杀系统聊聊分布式锁探索并发编程(六)...

  • Redis实现分布式锁

    分布式下的分布式锁一般实现有三种: 基于数据库的乐观锁 基于redis的分布式锁 基于zookeeper的分布式锁...

  • 分布式锁

    为什么要用分布式锁? 分布式锁是悲观锁的实现; 如果采用乐观锁的方案就用不着分布式锁了。 能用乐观锁的地方尽量用乐...

  • 3.10:分布式锁

    本文将梳理微服务架构下,分布式锁的常用方案。整体包含以下三部分: 分布式锁的提出 分布式锁主流方案 分布式锁选择 ...

网友评论

    本文标题:Redis--分布式锁

    本文链接:https://www.haomeiwen.com/subject/zkmazftx.html