我已经阅读过有关redis交易的多篇文章。 我有一些包含消息的列表。我使用redis为这些消息生成自动增量ID。 这就是我要做的事情:
Id
字段中,然后序列化邮件。因此,计数器始终保留相应列表中的最后一条消息ID。我想锁定计数器密钥,以便其他请求无法读取并INCR计数器并将另一条消息推送到与最后一个ID冲突的列表。
由于我想拥有有限数量的redis客户端,因此无法实现WATCH MULTI EXCEC,因为它是执行事务的同一客户端。据我所知,WATCH MULTI EXCEC适用于多个redis客户端。
我想知道这个问题的正确方法是什么。我应该使用LUA脚本并让它序列化消息吗?
答案 0 :(得分:2)
Lua绝对是创建一个读写数据的原子逻辑单元的最佳选择。
但是,在你的情况下,我不相信真正需要原子性。除非严格要求ID之间没有间隙,否则只需调用INCRBY
即可获取新ID,然后在序列化消息时使用它。其他消息将不获得相同的ID和唯一的"风险"在使用该ID序列化并存储消息之前让你的工人死亡(因此造成了一个空白)。