Модуль Redis - Доступ к нескольким ключам с кластеризацией в уме - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть модуль Redis с пользовательской командой, которая выдает команды сразу двум различным клавишам.

Пользовательские команды получают ключ (например, myKey), некоторые значения и выдают HSET myKey_sd1 ...и ZADD myKey_sd2 ... команды.

Интересно, что произойдет в конфигурации кластера, где каждый ключ может существовать в отдельном узле.

Прямо сейчас, внутри пользовательской команды модуля, я заключаю ключэто дано мне в { и }, поэтому я в итоге выдаю HSET {myKey}_sd1 и ZADD {myKey}_sd2

, что работает, но мне интересно, если это необходимо.

Мне также интересночто произойдет, если я получу ключ, который уже заключен в фигурные скобки (потому что пользователь модуля хочет самостоятельно контролировать хэш-слот) - например, 123_{myKey}

Прямо сейчас я все равно заключил бы этот ключв моих собственных фигурных скобках, когда я выдаю HSET и ZADD - HSET {123_{myKey}}_sd1 ... и ZSET {123_{myKey}}_sd2

В этом случае, насколько я знаю, Redis будет вычислять хеш для 123_{myKey, который подрывает вводпользователь (так как ония не хочу заключать 123_ часть)

Чтобы исправить это, я мог бы сделать так, чтобы моя пользовательская команда искала { в ключе, который он получил, если он не нашел {, ключ будет заключен в { и }, как я описал выше.Однако, если бы он нашел {, он оставил бы ключ как есть, в результате чего (в случае примера выше) HSET 123_{myKey}_sd1 ... и ZADD 123_{myKey}_sd2 - который работает как для пользователя, так и для внутренней работымодуль.

Поэтому мне интересно

  1. Является ли вложение ключей, которые я получаю от пользователя в { и }, правильным способом поддержки кластеризации?

  2. Если да, то я рассматриваю случай, когда пользователь правильно предоставляет ключ, который уже заключен в { и }?

1 Ответ

0 голосов
/ 10 февраля 2019
  1. Включает ли ключи, которые я получаю от пользователя в {и}, правильный способ поддержки кластеризации?

Документация по кластеру Redis Module - «пропущено» , но я считаю, что ваш модуль должен использовать тот же узел, что и ключ, переданный в качестве аргумента.

Итак, да, вы должны использовать хеш-тегичтобы убедиться, что ваши ключи используют тот же слот хеша, что и переданный ключ.

Если да, то я рассматриваю случай, когда пользователь предоставляет ключ, который уже правильно вложен в {и}?

Предлагаемое вами исправление (а не текущая реализация) правильно.Вы должны хешировать в тот же слот, что и передаваемый ключ, что означает соблюдение любого указанного хеш-слота.

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

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