美文网首页
redis锁分享

redis锁分享

作者: 麦迪归来 | 来源:发表于2019-04-23 14:14 被阅读0次

共享锁(读锁) LOCK IN SHARE MODE

排他锁(写锁,独占锁,互斥锁)FOR UPDATE

乐观锁和悲观锁

分布式锁:

1.保证多进程(不是多线程了)下数据的正确性

2.效率,一个节点获得锁后执行任务,保证其他节点执行其他任务

分布式锁和本地锁的区别:

分布式锁是进程级别的锁,本地锁是线程级别的锁

分布式锁要存放在redis、zookeeper等公共区域,进程间可见,而本地锁在进程内部的线程间可见

redis分布式锁的实现 - 单机时

1.获取锁:

redis 的 set 指令,设置成功即为获取了锁

setzjw 111  →  set  zjw 111NX→  set  zjw 111EX600 NX

(其实是一条指令,又是单线程,保证了互斥和安全)

2.释放锁:

释放锁之前 ,要先判断该锁是不是自己加的(线程ID),以防误删别人已经新加的锁

为了保证原子性,采用eval命令调用lua脚本

redis分布式锁的实现 - 集群时

存在问题:Master往slave同步锁时候,master crash了,造成锁丢失失效

                delay解决方案,延迟重启

Redlock算法:

1.记下开始获取锁的时间。startTime

2.依次向这三台Master发送获取锁的命令。timeout

3.如果获取到超过半数的锁,要记下当前时间。endTime

4.costTime = endTime - startTime,如果costTime<expireTime,则认为获取锁成功

(expireTime尽可能保证业务代码可以执行完,实在不行可以开个守护线程给锁续航)

5.如果获取不到超过一半的锁,或者costTime>=expireTime,都视为获取锁失败

6.如果获取锁失败,需要向全部Master节点,都发生释放锁的命令,也就是那段Lua脚本

相关文章

  • redis锁分享

    共享锁(读锁) LOCK IN SHARE MODE 排他锁(写锁,独占锁,互斥锁)FOR UPDATE 乐观锁和...

  • 秒杀随笔

    方法: mysql悲观锁 mysql乐观锁 PHP+redis分布式锁 PHP+redis乐观锁(redis wa...

  • 大佬浅谈分布式锁

    redis 实现 redis 分布锁一、redis 实现分布式锁(可重入锁)redission 实现分布式锁1、对...

  • Redis实现分布式锁

    Redis实现分布式锁 一、Redis单节点实现 (一) 获取锁 使用 Redis 客户端获取锁,向Redis发出...

  • 分布式锁之redis-lua脚本

    目录 redis分布式锁,Lua,Lua脚本,lua redis,redis lua 分布式锁,redis set...

  • redis锁

    1、单节点的redis锁优点:快缺点:不安全(redis节点断电,网络不通,锁过期等等) 2、多节点redis锁,...

  • Redis分布式锁

    Redis分布式锁 实现 Redis 锁主要利用 Redis 的 setnx 命令。 加锁命令:SETNX key...

  • 死磕 java同步系列之redis分布式锁进化史

    问题 (1)redis如何实现分布式锁? (2)redis分布式锁有哪些优点? (3)redis分布式锁有哪些缺点...

  • 使用JVM提高秒杀系统性能

    前提 使用redis分布式锁,解决秒杀系统库存为零 继续扣减问题 redis分布式锁出现的问题 使用redis锁,...

  • Zookeeper实现分布式锁(一)While版

    前面文章讲解了用Redis实现分布式锁的方式: 分布式锁之Redis实现(acquire)分布式锁之Redis实现...

网友评论

      本文标题:redis锁分享

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