Ответ 1
Поскольку вы делаете "...", трудно сказать наверняка, но я бы сказал, что вы настраиваете mykey во время этой части, что эффективно удалит истечение.
Тайм-аут очищается только тогда, когда ключ удаляется с помощью DEL команда или перезапись с помощью команд SET или GETSET
Кроме того, что касается ответа -1 от TTL
Возвращаемое значение
Integer ответ: TTL в секундах или -1, когда ключ не существует или не имеет тайм-аута.
EDIT: обратите внимание, что это поведение изменилось в Redis 2.8
Начиная с Redis 2.8, возвращаемое значение в случае ошибки изменилось:
Команда возвращает -2, если ключ не существует.
Команда возвращает -1, если ключ существует, но не имеет срока действия.
Другими словами, если ваш ключ существует, он будет казаться постоянным, то есть не будет установлен срок действия.
EDIT: Кажется, я могу воспроизвести это, если я создам ключ на подчиненном сервере REDIS, ведомый не удалит ключ без главного ввода, так как обычно вы не будете создавать ключи локально на подчиненном устройстве. Здесь ли это?
Однако, пока ведомые устройства, подключенные к ведущему устройству, не истекут ключи независимо (но будет ждать DEL, исходящий от мастера), они по-прежнему будут иметь полное состояние истечений, существующих в dataset, поэтому, когда раб выбирается мастером, он сможет истекают ключи независимо, полностью действуя как мастер.