Redis通过固定数量的客户进行交易

时间:2017-01-09 14:53:34

标签: redis

我已经阅读过有关redis交易的多篇文章。 我有一些包含消息的列表。我使用redis为这些消息生成自动增量ID。 这就是我要做的事情:

  1. 读取计数器值,然后INCR它。
  2. 将递增的计数器值放在邮件的Id字段中,然后序列化邮件。
  3. 将序列化邮件推送到列表中。
  4. 因此,计数器始终保留相应列表中的最后一条消息ID。我想锁定计数器密钥,以便其他请求无法读取并INCR计数器并将另一条消息推送到与最后一个ID冲突的列表。

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

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

1 个答案:

答案 0 :(得分:2)

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

但是,在你的情况下,我不相信真正需要原子性。除非严格要求ID之间没有间隙,否则只需调用INCRBY即可获取新ID,然后在序列化消息时使用它。其他消息将获得相同的ID和唯一的"风险"在使用该ID序列化并存储消息之前让你的工人死亡(因此造成了一个空白)。