redis——分布式锁

发布时间:2023年12月19日

一:实现一个分布式锁需要考虑哪些问题?

  1. 独占性:任何时刻有且只有一个线程持有这个锁
  2. 重入性:同一节点的同一线程如果获得锁之后,他可以再次获取这个锁
  3. 高可用:若redis集群环境下,不能因为某一个节点挂了而出现获取锁和释放锁失败的情况
    高并发请求下,依旧性能很好
  4. 防死锁:不能出现死锁问题,必须有超时重试机制或者撤销操作,有个终止跳出的途径
  5. 不乱抢:防止张冠李戴,只能解锁自己的锁,不能把别人的锁给释放了

二:如何用SETNX实现分布式锁?

利用Redis的单线程特性,多个Redis客户端同时通过SETNX命令尝试获取锁,如果返回1表示获取锁成功,否则获取锁失败。
因为Redis的单线程机制,所以可以保证只会有一个客户端成功获取到锁,而其他客户端则会失败。如果获取锁成功,则设置一个过期时间,防止该客户端挂了之后一直持有该锁。客户端释放锁的时候,需要先判断该锁是否仍然属于该客户端,如果是,则通过DEL命令释放锁。

三:什么是RedLock,他解决了什么问题?

RedLock是Redis的作者提出的一个多节点分布式锁算法,旨在解决使用单节点Redis分布式锁可能存在的单点故障问题。在使用单节点Redis实现分布式锁时,如果这个Redis实例挂掉,那么所有使用这个实例的客户端都会出现无法获取锁的情况。RedLock通过使用多个Redis节点,来提供一个更加健壮的分布式锁解决方案,能够在某些Redis节点故障的情况下,仍然能够保证分布式锁的可用性。
解决的问题:通过引入多个Redis节点来解决单点故障的问题。

文章来源:https://blog.csdn.net/weixin_44582492/article/details/135074669
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。