redis分布式锁有哪些要求


 大家好!我是Andy哥。作为有8年Java开发经验和2年微服务开发架构的开发者 技术交流探讨可以加我微信:bruce521java,我们一起共同成长!

    从单体应用到分布式应用开发需要解决很多技术难点,数据的并发安全问题不再像单体一样能用同步关键字synchronized或者加lock锁可以解决(他这种只能保证在同个jvm的线程安全)分布式的线程安全必须依赖于分布式锁。分布式锁主要有三种(mysql分布式锁,基于redis分布式锁,基于zookeeper分布式)出于易用性和高性能我们这边着重讲一下redis

首先说一下分布式特点: 

  1. 高性能 (redis io多路复用)

  2. 加解锁快  (redis 数据类型优化)

  3. 可重入 (线程号标记)

  4. 防止死锁(expire超时释放)

  5. 锁超时后的锁续期(业务没处理超出了锁释放时间)

  6. 安全性(只能加锁的才能释放锁)

  7. 容错性和可用性(redis集群部署,避免单个节点异常导致无法加锁)

  8. 互斥性 同时加锁只能有一个成功(redis单线程保证)

下面列一下自己实现redis出现异常的情况(图片来源网上)     

redis分布式锁原理

redis分布式锁主要基于redis单线程 setnx 和expire(key失效)指令,一些异常流程可以参考:

https://baijiahao.baidu.com/s?id=1711838009128778764&wfr=spider&for=pc


分布式锁的使用和选型

1.使用redisson库(比较完善)

2.使用redis setNx和expire指令加lua脚步(自己实现比较灵活)


出于篇幅和个人水平限制不在详说

再次感谢你们阅读Andy哥的文档,我们一起做更好的自己



你可能感兴趣的:(redis分布式锁有哪些要求)