Redis 中具有相同键的 SET 和 GET 之间是否存在延迟?
Is there a delay between a SET and a GET with the same key in Redis?
我在一台电脑上有三个进程:
- 一个测试(T)
- 带有我自己的模块(M)的nginx服务器---测试在每个测试用例部分之间启动和停止这个过程
- 一个 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
之间存在延迟,这可以解释此过程偶尔会失败?有没有办法让我确保 SET
在 redisCommand()
函数 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 获取命令?
我在一台电脑上有三个进程:
- 一个测试(T)
- 带有我自己的模块(M)的nginx服务器---测试在每个测试用例部分之间启动和停止这个过程
- 一个 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
之间存在延迟,这可以解释此过程偶尔会失败?有没有办法让我确保 SET
在 redisCommand()
函数 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 获取命令?