Использование REDIS с использованием больших ключей с небольшими значениями - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть сценарий использования redis, который немного отличается.
В моем MySQL у меня есть объект, давайте назовем его HumanEntity. это HumanEntity имеет много ко многим отношениям.

HumanEntity.Urls - множество URL-адресов на HumanEntity.
HumanEntity.UserNames - множество имен пользователей на HumanEntity.
HumanEntity.Phones ...
HumanEntity.Emails ...

в течение одного обычного часа приложение создает сотни из этих многих значений.
Вариант использования: приложение получает HTTP-вызов (100 в секунду) со значением HumanEntity (Url или UserName или Phone или Email).

Мне нужно отсканировать мои MySQL (1 000 000 записей) и вернуть обратно HumanEntity.Id(integer).
Поскольку вполне нормально иметь некоторую задержку в целостности данных, я думал о РЕДИС.

Могу ли я сохранить значения как Redis key и как * и 1026 * в качестве значения.
Мой API должен вернуть обратно HumanEntity.Id(integer).

имеет ли смысл иметь такой длинный ключ и такое короткое значение? URL, например, может быть 1500 байт, а значение может быть 1 байт.

Каков лучший метод redis для реализации этого?

Спасибо

1 Ответ

0 голосов
/ 17 апреля 2020

Если значения не являются уникальными, у вас могут возникнуть проблемы. Телефоны, электронные письма или имена пользователей могут быть уникальными для пользователя, но я не уверен насчет URL или любого другого свойства, хранящегося в вашей базе данных. Вы можете перезаписать значение идентификатора другим пользователем.

Если у вас нет таких проблем; Вы можете перейти к строковым типам, временная сложность GET и SET равна O (1) - это лучшее, что вы можете получить.

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

...