redis实现分布式锁

分布式锁的使用场景

高并发场景下对共享资源的写操作(多进程情况下),保证同一时间只有一个线程执行同步代码块。

Redis实现分布式锁

incr key 原子加
decr key 原子减
思路:执行incr key 返回1 则获取到锁,执行完业务逻辑后decr key 原子减(也可用setnx),为了避免死锁,用try finally,超时时间
问题1:A业务逻辑执行时间若超过超时时间,锁会释放掉,B获取锁,待A执行完会释放完B的锁,导致并发问题。
解决:执行业务逻辑时,开启后台线程,监听业务逻辑是否完成,如果没有完成,则重置超时时间。
redisson框架(解决了自旋问题):redisson.getLock 获取的是重入锁,key保存了hashcode和重入次数
在这里插入图片描述
问题2:主库挂掉,锁还没有同步到从库上去
解决:用zookeeper,保证一致性,同步机制,ZAB协议:1.全局串行化的写操作 2.保证同一客户端的指令被FIFO执行

如何提高并发?
将业务逻辑分段,比如说库存分为10份,参考jdk1.7中ConcurrentHashMap的实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值