我在一台计算机上有三个进程:
以下是各种事件的示意图:
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
失败了,我认为这是因为它以某种方式发生得太快了。知道如何解决这个问题吗?
答案 0 :(得分:2)
否,设置和获取之间没有延迟。您正在做的事情应该起作用。
尝试在单独的窗口中运行monitor命令。失败时-set命令在get命令之前还是之后?