Лучший способ хранить KVP в Redis для поиска по ключу и значению - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу хранить сопоставления для моих собственных внутренних целочисленных идентификаторов и идентификаторов внешних систем. Например, у меня могут быть следующие данные:

MySystemInteger: 3, ExternalSystemInteger: 5
MySystemInteger: 8, ExternalSystemInteger: 1
MySystemInteger: 4, ExternalSystemInteger: 2

Я хочу иметь возможность получить MySystemInteger для определенного значения ExternalSystemInteger, а также получить ExternalSystemInteger для определенного значения MySystemInteger.

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

Есть ли хороший способ сделать это? Или мне придется хранить два набора данных? Один, где MySystemInteger является ключом, а другой, где ExternalSystemInteger является ключом? Спасибо

1 Ответ

1 голос
/ 18 апреля 2020

Выполнение KEYS на производстве рискованно и, как указано в redis документации , может привести к краху. Вы можете использовать Хеши для этого случая;

  • hset pair my:1 ext:7
  • hset pair ext:7 my:1
  • hget pair ext:7 возвращает my:1
  • hget pair my:1 возвращает ext:7

, если хотите, вы можете использовать hmset при установке этих двух полей ha sh. Хранение их в другом ха sh также является другим вариантом.

...