redis分布式锁(高并发)

本文深入探讨Redis分布式锁的实现原理,包括CAS算法的应用、锁续命机制、过期时间设置,以及如何避免并发安全问题。同时,介绍了Redisson框架简化分布式锁的使用,并讨论了在高并发场景下可能遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis分布式锁(高并发)

  1. redis是天生单线程特性,的内存缓存服务器,当有多个线程同时访问一台redis服务器时,redis会在内部对线程进行排队。所以redis可以用此特性进行分布式锁。
  2. 高并发的场景下,redis分布式锁很可能永久失效。
  3. redis分布式锁使用了cas算法原理。
  4. synchronized时jvm级别的锁,当项目采用集群部署的时候必须采用分布式锁。才能保证线程安全。
  5. redis设置过期时间和锁续命。过期时间防止加锁成功后如果加锁的线程由于异常不能释放锁,(宕机和抛异常)保证释放锁的代码一定执行。所以设置过期时间,开启分线程采用定时执行,重新设置锁的过期时间。分线程通过主线程锁是否还存在而存在。集群下只会有一个定时子线程。(过期时间设置不当有可能当前线程的执行时间超过过期时间,还没有执行完就释放锁了,后来的线程又可以加锁执行存在并发安全问题)
  6. 加锁和过期时间设置要保证原子性操作。
  7. 过期时间的设置大小:有可能会导致自己加的锁总会被别的线程释放(即线程还没有执行完锁已经过期了,当线程执行完时释放锁时是释放的后来线程加的锁。)。例如秒杀商品。实现:自己加的锁只能自己释放,在释放锁的时候判断是否是自己加的锁根据锁的value值clientId来判断。
  8. Redisson是实现了分布式锁的框架。

     

 

9.redis一般架构采用主从或者哨兵模式,如果主机设置了key还没有来得及同步到从节点,主节点出现宕机,主节点宕机后发生主从切换,新的线程进来后依然成功获取了锁,(要实现高可用同一时刻加锁的代码块只能由一个线程获取锁),但此时前面加锁的在主节点的线程还没有执行完。

10.也可以通过Lua脚本代码来设置expier和释放锁。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值