node.js - redis高并发插入

标签 node.js redis

我尝试将评论存储在 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/

相关文章:

node.js - 为什么我收到 Kafka 错误无法初始化消息中心服务的 SASL 身份验证 : SASL handshake failed when using Node. js 客户端?

Docker Swarm Redis 和 Sentinel with master-slave replication IP resolution client failure

node.js - NodeBB (Redis) 找回用户名和密码

javascript - 将业务逻辑放在 Node+Express.js REST Api 的什么地方

javascript - 缓冲区与字符串速度 : Why is String faster?

javascript - Npm 提示 - 自定义验证和多行消息?

node.js - 蒙哥错误: socket hang up

docker - Redis : Creating Server TCP listening socket *:6379: unable to bind socket, 错误号:13

authentication - 如何禁用 redis 将自动 session 存储到数据库?

c# - Redis 是本地缓存的可行解决方案吗?