Redis 中具有相同键的 SET 和 GET 之间是否存在延迟?

Is there a delay between a SET and a GET with the same key in Redis?

我在一台电脑上有三个进程:

  1. 一个测试(T)
  2. 带有我自己的模块(M)的nginx服务器---测试在每个测试用例部分之间启动和停止这个过程
  3. 一个 Redis 服务器 (R),它总是 运行ning --- 测试不处理此服务的 start/stop 序列(我正在测试我的 nginx 模块,而不是 Redis .)

这是各种事件的图表:

T    M    R
|    |    |
O-------->+   FLUSHDB
|    |    |
+<--------O   (FLUSHDB acknowledge as successful)
|    |    |
O-------->+   SET key value
|    |    |
+<--------O   (SET acknowledge as successful)
|    |    |
O--->+    |   Start nginx including my module
|    |    |
|    O--->+   GET key
|    |    |
|    +<---O   (SUCCESS 80% and FAILURE 20%)
|    |    |

测试用 FLUSHDB 清除 Redis 数据库,然后用 SET key value 添加一个键。然后测试启动 nginx,包括我的模块。偶尔,nginx 模块 GET key 操作会失败。

注意 1:我没有使用 Redis 的 ASync 实现。

注2:我使用的是C库hiredis

是否有可能在使用相同密钥的 SET 和随后的 GET 之间存在延迟,这可以解释此过程偶尔会失败?有没有办法让我确保 SETredisCommand() 函数 returns 后真正完成?

重要说明: 如果我 运行 一个这样的测试并且 GET 在我的 nginx 模块中失败,则密钥出现在我的 Redis 中:

redis-cli
127.0.0.1:6379> KEYS *
1) "8b95d48d13e379f1ccbcdfc39fee4acc5523a"
127.0.0.1:6379> GET "8b95d48d13e379f1ccbcdfc39fee4acc5523a"
"the expected value"

所以

SET "8b95d48d13e379f1ccbcdfc39fee4acc5523a" "the expected value"

按预期工作。只有 GET 失败了,我认为这是因为它以某种方式发生得太快了。知道如何解决这个问题吗?

不,设置和获取之间没有延迟。你在做什么应该工作。

在单独的 window 中尝试 运行 监控命令。当它失败时 - 设置命令是否来自 before/after 获取命令?