Я использую Redis для хранения объектов Java. Например, у меня есть класс User (FirstName, LastName), и у каждого пользователя есть несколько адресов Address (Улица, Город).
Пользователи хранятся в базе данных как хеши Redis:
HMSET user:0 firstname qwert lastname zuiop
Поскольку каждый логически связан с конкретным пользователем, их ключ включает в себя ключ пользователя:
HMSET user:0:addresses:0 street Teststreet city Exampletown
Однако я не уверен, как обеспечить следующие функции:
В принципе, я вижу два варианта:
Использование наборов:
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)
Использование KEYS
KEYS user:* (to access list of users)
KEYS user:0:addresses:* (to access list of addresses)
Существуют ли альтернативы этим подходам?
Каким образом больше "Redis"?
ВАЖНО: Не используйте KEYS
на производстве - он может блокировать ваши запросы приложений, в то время как Redis перемещается по ключевому пространству.
Метод списков - это, конечно, один из способов, но я бы рассмотрел объем пространства, который в конечном итоге потребует список. В качестве альтернативы, я бы рассмотрел использование новых команд SCAN
v2.8 для итерации по шаблонам имен ключей в неблокирующем режиме.