分布式锁总结

问题场景:

由于我们项目是多台共同部署同一个项目的,此时传统的synchronize锁等只能锁住当前虚拟机!在操作统一资源时候并不能解决并发问题,此时需要一个共有资源作为锁!

分布式锁实现方式:

1:数据库锁(无锁失效机制)

2:redis锁

3:zookeeper锁

我司使用的是redis锁,本文是自己对redis的理解!

1.获取锁,基于redis的sennx指令,redis高版本已实现原子性。共享资源作为key,随机数作为value(目的是只能由当前线程删掉这把锁,防止其他线程误删)如果未获取到进行重试,线程睡眠一段时间继续抢锁,锁定成功返回RedisLock(key,value)对象,锁定失败返回null

2.释放锁,基于lua脚本实现,必须value匹配才能释放锁。如果当前服务挂掉,redis有过期时间自动释放

问题:

1.此方法在获取失败时会自动重试指定的次数,多次等待会阻塞当前线程(可以修改为不重试的方法)

2.主从复制主服务器挂掉问题

官方给出的解决方案是redislock算法

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值