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

时间:2019-03-31 06:22:43

标签: c nginx redis delayed-execution

我在一台计算机上有三个进程:

  1. 测试(T)
  2. 具有我自己的模块(M)的nginx服务器---测试在每个测试用例部分之间启动和停止该过程
  3. 始终运行的Redis服务器(R)-测试无法处理该服务的启动/停止顺序(我正在测试我的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之间是否存在延迟,这可能说明该过程有时会失败?我有办法确保一旦SET函数返回后,redisCommand()确实完成了吗?

重要提示::如果我运行了一个这样的测试,但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失败了,我认为这是因为它以某种方式发生得太快了。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

否,设置和获取之间没有延迟。您正在做的事情应该起作用。

尝试在单独的窗口中运行monitor命令。失败时-set命令在get命令之前还是之后?