Списки и сканирование ключей

1

Я использую Redis для хранения объектов Java. Например, у меня есть класс User (FirstName, LastName), и у каждого пользователя есть несколько адресов Address (Улица, Город).

Пользователи хранятся в базе данных как хеши Redis:

HMSET user:0 firstname qwert lastname zuiop

Поскольку каждый логически связан с конкретным пользователем, их ключ включает в себя ключ пользователя:

HMSET user:0:addresses:0 street Teststreet city Exampletown

Однако я не уверен, как обеспечить следующие функции:

  • Доступ ко всем пользователям в базе данных
  • Доступ ко всем адресам, принадлежащим определенному пользователю

В принципе, я вижу два варианта:

  1. Использование наборов:

    SADD user user:0
    SADD user user:1
    ...
    SMEMBERS user (to access list of users)
    ...
    SADD user:0:addresses user:0:addresses:0
    SADD user:0:addresses user:0:addresses:1
    SMEMBERS user:0:addresses (to access list)
    
  2. Использование KEYS

    KEYS user:* (to access list of users)
    KEYS user:0:addresses:* (to access list of addresses)
    

Существуют ли альтернативы этим подходам?
Каким образом больше "Redis"?

Теги:
redis
key-value

1 ответ

2

ВАЖНО: Не используйте KEYS на производстве - он может блокировать ваши запросы приложений, в то время как Redis перемещается по ключевому пространству.

Метод списков - это, конечно, один из способов, но я бы рассмотрел объем пространства, который в конечном итоге потребует список. В качестве альтернативы, я бы рассмотрел использование новых команд SCAN v2.8 для итерации по шаблонам имен ключей в неблокирующем режиме.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню