如何访问锁定哨兵Redis访问多个Pod的隐私?

mxg2im7a  于 8个月前  发布在  Redis
关注(0)|答案(1)|浏览(73)

我有一个红魔哨兵1主和2从。我已经在集群上部署了一个web dotnet核心web API应用程序3 pod。所以每个pod都有一个后台worker来访问文件系统,做自己的工作,并用一个key(done=true)更新redis。每个pod运行相同的worker。
所以如果done=false,每个pod在相同的时间运行相同的作业。所以我想运行第一个访问的pod做的工作,其他人不做。我该怎么做?

bprjcwpo

bprjcwpo1#

一个解决方案是在Redis中添加另一个密钥,它将成为一个带有pod ID或其他内容的锁定机制。所以如果done = true那么locked = false。当done = false获得信息并成功设置locked的第一个pod可以启动文件系统作业。作业完成后,pod会更新done = truelocked = false
为了避免竞争条件,您必须在更新值时使用WATCHtransactions。如果监视值被更新,则事务将失败。
伪代码:

WATCH locked
res = GET locked
IF res == false
  MULTI
  SET locked pod123
  EXEC

您还需要处理当pod停止运行而锁仍保留在locked = pod123中时的场景。

相关问题