我尝试将评论存储在 redis 数据库中。我的数据结构:
z
列出我持有 commentId 的位置。让我们 commentId = 3。- 并像
comment:3
一样散列评论文本、ip、useragent 和评论时间。
当我做 zadd首先我从中得到最大的 Id,然后加 1 - 这将是新的 Id。
同时添加 2 条评论时出现问题。他们都可以获得相同的 Id,然后在哈希表中,一条评论可能会丢失。
那么如何在高并发下不重复计算newId呢?
最佳答案
将您的两步程序包装在 a Lua script 中并称之为。因为 redis 是单线程的,所以 lua 脚本调用将被序列化(= 无竞争条件)。
备选
或者您可以将评论 ID 存储在一个单独的键中,您可以 INCR .这样,即使不将这两个步骤包装在脚本中,它也应该可以工作。
关于node.js - redis高并发插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21771436/