Redis分布式锁的实现

本文介绍了分布式锁的应用场景和三大基础特性,阐述了单实例中实现锁的方法。重点讨论了Redis作者提出的Redlock算法,包括其获取锁的操作流程。同时对该算法的可行性和安全性提出疑问,认为可能存在多线程同时处理任务的情况,欢迎探讨。

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

在对多进程互斥访问或者修改共享资源的时候,在多节点可能会做相同重复工作的时候,为了正确性,效率性,分布式锁就可以应用到这些场景了。

分布式锁有三大基础特性

        1.互斥性:和数据库等行锁一样互斥性是最基本的。

        2.高效高可用:获取锁要效率高,高可用,大多数锁节点正常情况下,锁管理器可以正常工作。

在单实例中实现锁,一般运用命令set key rand_value PX 2000 NX,这个命令,就是在Key不存在的时候设置key-value,过期时间为2000毫秒。这个里面的rang_value必须保证所有客户端请求的唯一性,我们要用这个值来安全释放锁。我们可以用lua脚本来安全执行锁的释放

if redis.call("get",KEYS[1]) == ARGV[1] then
        return redis.call("del",KEYS[1])
    else
        return 0
    end

redis的分布式锁做牛逼的实现方式莫非就是redis作者Antirez提出的Redlock.下面我们就来讨论学习一下这个算法。

        假设我们有5个redis Master节点,这些节点是项目独立的,部署在不同的机器上面。我们在获取锁的时候,和单例获取一样,轮流从这个5个节点上面获取锁,具体的操作流程如下:
       1.获取当前的毫秒时间戳

       2.轮流用相同的key和唯一性value在这5个节点上面去获取锁。在这里面我们要设立一个redis的请求的超时时间(相比锁的释放时间要小很多,这样才能保证最终的业务处理时间,比如锁的释放时间为2秒,这个请求超时时间为10毫秒),避免一个在一个redis节点上面阻塞过长时间。

      3.成功获取锁的节点超过一半(这里为3),获取锁的总时间为T_all小于锁的释放时间T_out。这两个条件同时成立则认为这个锁是获取成功的

     4.锁获取成功,那剩下的锁释放时间就是T_out_now = T_out-T_all.

     5.如果锁获取失败了,则客户端到每个节点上面去释放锁(包括客户端认为没有获取成功的锁)

现在我们知道了这个redlock算法的整个流程,那么这个算法的可行性和安全性有保证么?

     看官方的解释,他们认为是安全的,具体的解释为:

    大多数获取到锁的的节点,他么都有一个共同的存在时间,在这个时间内,其他的客户端是无法获取得到锁的。
 

 

但是我有一个疑问:

假设5个master节点,A线程在其中4个节点中获取到了锁,最先获取到的时间为t1,最后获取到的为t2,锁的过期时间为T,那么存在一个共同的存在时间为T-t1-t2=Tc。这4个set成功的节点肯定有陆续过期的存在,哪怕时间粒度再小。假设过期过程为,node1,node2,node3,node4(node5没有获取成功),在A线程处理的过程中,假设处理的时间大于锁的释放时间,这个时候,在这个4个节点设置的锁过期了2个,加上没有设置成功的节点5,就是有3个节点可供其他线程去获取锁,这时候其他线程获取成功了,岂不是有2个线程在同时处理一个任务了,以此类推岂不是会有多个线程同时处理一个任务的可能性呢?

 

非常欢迎有兴趣的人来探讨我这个疑问

 

 

 

 

 

 

 

 

 

 

      

 

 

内容概要:本文介绍了基于SMA-BP黏菌优化算法优化反向传播神经网络(BP)进行多变量回归预测的项目实例。项目旨在通过SMA优化BP神经网络的权重和阈值,解决BP神经网络易陷入局部最优、收敛速度慢及参数调优困难等问题。SMA算法模拟黏菌寻找食物的行为,具备优秀的全局搜索能力,能有效提高模型的预测准确性和训练效率。项目涵盖了数据预处理、模型设计、算法实现、性能验证等环节,适用于多变量非线性数据的建模和预测。; 适合人群:具备一定机器学习基础,特别是对神经网络和优化算法有一定了解的研发人员、数据科学家和研究人员。; 使用场景及目标:① 提升多变量回归模型的预测准确性,特别是在工业过程控制、金融风险管理等领域;② 加速神经网络训练过程,减少迭代次数和训练时间;③ 提高模型的稳定性和泛化能力,确保模型在不同数据集上均能保持良好表现;④ 推动智能优化算法与深度学习的融合创新,促进多领域复杂数据分析能力的提升。; 其他说明:项目采用Python实现,包含详细的代码示例和注释,便于理解和二次开发。模型架构由数据预处理模块、基于SMA优化的BP神经网络训练模块以及模型预测与评估模块组成,各模块接口清晰,便于扩展和维护。此外,项目还提供了多种评价指标和可视化分析方法,确保实验结果科学可信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值