首页 > 解决方案 > Redis 竞争条件:`Keys *` 有时会返回错误数量的键

问题描述

我有 2 个应用程序。第一个是编写键,例如

SET MyKey_1
SET MYKey_2

然后通过网络向第二个应用程序发送通知。

其他应用程序等待通知,然后计算数据库中有多少具有特定前缀的键:

KEYS MyKey_*

如果密钥计数与预期不同,则会引发错误:

waitNotification(firstAppSocket)
if redisCount("KEYS MyKey_*") != 2 {
  panic("wrong key count")
}

有时我遇到第一个应用程序设置密钥并从 Redis 接收 OK,通知第二个应用程序,但计数返回 1 的竞争条件。这大约发生。10 次中有 1 次。如果我在很短的超时(说微秒)后重试计数操作,它就会变得正确。

Redis 中是否存在此类操作的竞争条件?是否存在关键人口超时?

标签: redisrace-condition

解决方案


推荐阅读