Нужно ли заранее объявлять ключи в сценарии Redis? - PullRequest
0 голосов
/ 19 мая 2018

Мой план состоит в том, чтобы хранить некоторые существующие ключи Redis в хэше, которые впоследствии будут извлечены из скрипта Redis Lua и обработаны.Я прочитал, что при вызове EVAL рекомендуется предоставлять все ключи, которые используются в скрипте.

Мой вопрос заключается в том, безопасно ли запускать сценарий, который не имеет ключей при запуске EVAL, но работает с некоторыми ключами, которые извлекаются из в сценария?Если нет, каковы последствия и как я могу избежать этого недостатка?

Я упоминаю, что во время EVAL не было никакого способа узнать, каковы ключи в этом конкретном хеше.Я могу получить все ключи из хеша за шаг до EVAL, затем передать их EVAL, но это звучит как излишнее.

1 Ответ

0 голосов
/ 19 мая 2018

Из-за неоднозначности в документации этот вопрос часто задают (см., Например, это и это ), но я воспользуюсь этим случаем, чтобы попытаться указатьФактическое правило, регулирующее использование ключей в сценариях Redis.

Фактическое правило таково: Ваш сценарий должен иметь доступ только к тем ключам, которые находятся на одном сервере, а Redis должен знать, что это за сервер, чтобы онможно направить сценарий туда.

Если вы не используете Redis Cluster, то эти условия всегда будут соблюдаться, поскольку существует только один сервер.

Если вы используете Redis Cluster,затем вы должны указать хотя бы один ключ, и все ключи, которые использует скрипт, должны находиться на том же сервере, что и указанные ключи.

Итак, чтобы ответить на ваш вопрос: ваш скрипт будет работать нормально, если вы неиспользуя кластер.Последствия этого состоят в том, что это не сработает, если вы позже переключитесь на Cluster, поскольку Redis не будет знать, куда отправить скрипт.

Также возможно, что Redis может перейти к принудительному применению документированного правила, делая недействительным всескрипты, которые динамически генерируют ключи.По моему мнению, это было бы плохой ошибкой, и я не думаю, что это произойдет.Но указание ключей полезно, как документация, если не сказать больше, поэтому я всегда делаю это, если случайно узнаю ключи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...