Redis事务按固定数量的客户端进行

  • 本文关键字:客户端 事务 Redis redis
  • 更新时间 :
  • 英文 :


我已经阅读了多篇关于redis事务的文章。我有一些包含消息的列表。我使用redis为这些消息生成自动递增的ID。以下是我要做的:

  1. 读取计数器值,然后INCR
  2. 将递增的计数器值放在消息的Id字段中,然后序列化消息
  3. 将序列化的消息推送到列表中

所以计数器总是在相应的列表中保存最后一条消息的ID。我想锁定计数器密钥,这样其他请求就无法读取并INCR计数器,并将另一条消息推送到与最后一个ID冲突的列表中。

由于我想要有限数量的redis客户端,WATCH MULTI EXCEC无法实现,因为它是执行事务的同一个客户端。据我所知,WATCH MULTI EXCEC适用于有多个redis客户端的情况。

我想知道解决这个问题的正确方法是什么。我应该使用LUA脚本并让它序列化消息吗?

Lua绝对是创建一个既能读取数据又能写入数据的原子逻辑单元的最佳选择。

然而,在你的情况下,我不相信原子性真的是必要的。除非有一个严格的要求,即ID之间没有间隙,否则您可以调用INCRBY来获得一个新的ID,然后在序列化消息时使用它。其他消息将不会获得相同的ID,唯一的"风险"是在使用该ID序列化和存储消息之前让您的工作人员死亡(因此会产生间隙)。

最新更新