redis高并发插入

时间:2014-02-14 05:22:51

标签: node.js redis

我尝试在redis数据库中存储注释。我的数据结构:

  • z列出我持有commentId的位置。让我们评论一下= 3.
  • comment:3一样使用评论文本,ip,useragent和评论时间。

当我zadd首先从中获取最大ID时,再加上1 - 它将是新的Id。

当同时添加2条评论时,问题就开始了。并且它们都可以获得相同的Id,然后在哈希表中可以丢失一条注释。

那么如何计算newId而不重复高并发?

1 个答案:

答案 0 :(得分:2)

将您的两步程序包裹在a Lua script中并拨打电话。因为redis是单线程的,所以lua脚本调用将被序列化(=没有竞争条件)。

替代

或者您可以将评论ID存储在可以INCR的单独密钥中。这样,即使不将两个步骤都包含在脚本中,它也应该可以工作。