正确的Redis分布式锁实现(Distributed lock)

正确的Redis分布式锁实现(Distributed lock),第1张

锁要实现的三个目标:

该命令仅在密钥尚不存在时才设置key(NX选项),到期时间为30000毫秒(PX选项)。键设置为值 “myrandomvalue” 。此值必须在所有客户端和所有锁定请求中都是唯一的。

使用随机值是为了以安全的方式释放锁,实现上使用了Redis的脚本:只有当key存在且其值恰好是我期望的随机值时才删除key。这是通过以下Lua脚本完成的:

这一点很重要,这可以避免删除由另一个客户端创建的锁。例如:

ok,这样我们完成redis分布式锁的实现。你以为这样就安全了吗,接下来我们设想这样一个情况:

首先,假设我们的Redis是主从的:

这时就会同时有两把锁存在的情况。对于这种情况(非常特殊),Redis官方提供了一个叫RedLock的解决方案。

我们假设我们有N个Redis主机。这些节点完全独立,因此我们不使用复制或任何其他隐式协调系统。我们假设N = 5,这是一个合理的值,因此我们需要在不同的计算机或虚拟机上运行5个Redis主服务器,以确保它们以大多数独立的方式失败。

为了获取锁,客户端执行以下 *** 作:

我个人觉得对于小公司这还是相当昂贵的。

其他的细节请参考 redis官方文档 。

你应该装单机版并且在系统服务里配置你的sql服务器名称。(如果是本地默认的服务器名称是lockhost)
如果还是提示错误,去windows->system32->drivers->etc->hosts文件用记事本打开最在下面输入你的ip和服务器名称的映射。格式:127001
(空7格)服务器名称


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13440665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-06
下一篇 2023-08-06

发表评论

登录后才能评论

评论列表(0条)

保存