gpt4 book ai didi

雷迪斯 : How to prevent this race condition

转载 作者:可可西里 更新时间:2023-11-01 11:04:25 25 4
gpt4 key购买 nike

我在 redis 中有一个散列,其中一个字段的值为字符串化数组,每当用户注册一个事件时,

  1. 从redis中获取这个字符串化数组
  2. 后台解析,将用户的用户名添加到数组中
  3. 将数组字符串化并存储回哈希

如果两个用户在足够接近的时间注册,这里可能存在潜在的竞争条件。

竞争条件可能是这样的,两个用户从 redis 获得相同的字符串化数组,然后他们修改,并且只有一个更新会发生,因为一个将被另一个覆盖。

有没有办法像 SQL 中的事务一样防止这种竞争条件。我读过有关 multi 的内容,但它不允许在服务器上的命令之间进行计算。

或者存储字符串化数组并存储为哈希字段是个坏主意,我应该在 redis 上为此使用普通列表。

最佳答案

解决方案是尽可能使用原子操作。您有多种选择:

  • 使用支持LPUSH等便捷命令的真实Redis列表
  • Lua script 内做所有事情(根据定义,它们是原子的)
  • 使用Redis transactionsWATCH 命令来跟踪变化

典型的 WATCH 用法包括尝试执行事务直到成功。您可以使用一个简单的循环来完成此操作,但是您的连接器可能有一个专门用于此目的的特殊便捷方法。

关于雷迪斯 : How to prevent this race condition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38760201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com