分布式锁概述

  分布式锁简介:

在同一个JVM内部,大家往往采用synchronized或者L ock的方式来解决多线程间的安全问题,但是在分布式架构下,在JVM之间,那么就需要一种更加高级的锁机制, 来处理跨JVM进程之间的线程安全问题,解决方案就是:使用分布式锁。

 

Redis分布式锁原理:

Redis分布式锁机制,主要借助setnx和expire两个命令完成

setnx:

当key不存在,将key设置为value ,存在不做任何操作,返回0

expire:

设置key过期时间

加锁的问题

setnx成功,expire失败。如果没有手动释放,那么这个锁永远被占用,其他线程永远也抢不到锁。

解决方案:

1、使用set的命令时,同时设置过期时间,命令set lock "1234" EX 100 NX

2、使用lua脚本,将加锁的命令放在lua脚本中原子性的执行

Redisson

Redisson加锁原理:

加锁:

1.判断有没有“DISL OCK”

2.如果没有,设置UUID:1=1

3.设置它的过期时间

锁重入:

1.KEY和字段都存在,锁重入

2.执行命令incrby UUID:1 1

3.结果: DISLOCK: {UUID:1 2}

锁互斥:

1.客户端2进入

2.判断有KEY,没有字段

3.返回过期时间

4.客户端2自旋等待

Watch dog自动延期

分段锁

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值