Есть ли задержка между SET и GET с тем же ключом в Redis? - PullRequest
1 голос
/ 31 марта 2019

У меня три процесса на одном компьютере:

  1. Тест (T)
  2. Сервер nginx с моим собственным модулем (M) --- тест запускается и останавливаетсяпроцесс между каждым разделом теста
  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%)
|    |    |

Тест очищает базу данных Redis с помощью FLUSHDB, затем добавляет ключ с SET key value.Затем тест запускает nginx, включая мой модуль.Там время от времени происходит сбой действия GET key модуля nginx.

Примечание 1: я не использую реализацию ASync Redis.

Примечание 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 Ответ

2 голосов
/ 31 марта 2019

Нет, между установкой и получением нет задержки.То, что вы делаете, должно работать.

Попробуйте запустить команду монитора в отдельном окне.Когда это терпит неудачу - команда set приходит до / после команды get?

...