Доступ к списку по любому индексу, который не находится рядом с фронтом или концом, будет дорогостоящим, стоив O (N).Для больших списков это не очень эффективно.
Использование хэшей может лучше всего соответствовать вашим потребностям.Это будет использовать больше памяти, чем список, но обеспечит почти O (1) доступ.
Хэш в redis - это именованный ключ, который может содержать произвольные поля и значения.
Вы можете сохранитьвся запись пользователя в одном хэше redis, названная с использованием member_id (надеюсь, это короткое значение).Если member_id гарантированно будет уникальным для каждого пользователя, вот как заполнить хеш для пользователя member_id 42.
hset user:42 email foo@example.com
hset user:42 username foobar
hset user:42 logincount 0
Redis «имя ключа» здесь - это «user: 42».Каждый пользователь получит один ключ, похожий на одну строку в базе данных SQL, но более гибкий.Затем вы можете обновить два вспомогательных хэша: один для сопоставления имен пользователей с member_id, а другой для сопоставления адресов электронной почты с member_id.Это предполагает, что у вас есть отношение 1: 1 между member_id, именем пользователя и адресом электронной почты.
hset username_to_id foobar 42
hset email_to_id foo@example.com 42
Когда вам нужно найти адрес электронной почты для определенного пользователя, вы сначала ищите member_id из email_to_id
хэш, а затем получить поле email
из хэша у ключевого пользователя: member_id Аналогично, вы можете начать с имени пользователя, найти member_id в хэше username_to_id
, а затем перейти к пользователюзапись хранится у пользователя: member_id
хэш.
Вот пример поиска имени пользователя по адресу электронной почты:
redis> hget email_to_id foo@example.com
"42"
redis> hget user:42 username
"foobar"
redis>
Вы можете добавить больше записей пользователю, добавивдополнительные поля для хэша "user: ".Если вы хотите увеличить счетчик входа в систему, это также просто:
redis> hincrby user:42 login_count 1
(integer) 1
redis> hgetall user:42
1. "email"
2. "foo@example.com"
3. "username"
4. "foobar"
5. "login_count"
6. "1"
redis>
Вы можете найти больше информации о хэшах на сайте redis.io.