Как искать в redis для хеш-ключей?
Я использую хеш-ключи для хранения данных пользователя, например:
hmset user:1 user_name lee age 21
hmset user:2 user_name david age 25
hmset user:3 user_name chris age 25
Мне нужно искать пользователей, имеющих age = 25
, name = lee
. Как выполнить поиск заданного значения в заданном поле?
Ответы
Ответ 1
Вы не можете. Redis - это хранилище ключей, а не реляционная база данных.
Чтобы найти конкретные данные, вам необходимо создать путь доступа к этим данным. Например, чтобы получить пользователей с возрастом = 25, вам нужно создать индекс для сопоставления значений возраста пользователям. Это можно сделать с помощью набора. Это то же самое для имени.
Как только у вас есть настройки для возраста и имени, вы можете искать пользователей, пересекая их. Например:
# Add 3 users
hmset user:1 user_name lee age 21
hmset user:2 user_name david age 25
hmset user:3 user_name chris age 25
# Maintain age index
sadd age:21 1
sadd age:25 2 3
# Maintain name index
sadd name:lee 1
sadd name:david 2
sadd name:chris 3
# Get the ID of users having age = 25 and name = lee
sinter age:25 name:lee
-> will return an empty set
Ответ 2
На самом деле вы можете сделать это с помощью значений put в ключе
HMSET lee:25 user_name lee age 25
HMSET massi:43 user_name massi age 43
HMSET lee:24 user_name lee age 24
HMSET lee:28 user_name lee age 28 city Berlin
Теперь вы можете найти их с помощью команды "keys"
127.0.0.1:6379> keys *:25
1) "lee:25"
127.0.0.1:6379> keys lee*
1) "lee:25"
2) "lee:24"
3) "lee:28"
127.0.0.1:6379> keys massi:43
1) "massi:43"
Наконец, найдите специальные хэши
127.0.0.1:6379> HGETALL lee:24
1) "user_name"
2) "lee"
3) "age"
4) "24"
Все, что я сказал, это то, что вы можете сделать это за два шага, поместите любое количество значений, которые вам нужны в ключе, а затем найдите их. Но учтите, что не стоит включать все значения внутри ключа. Просто поставьте те, с которыми вам нужно выполнить фильтрацию. Приветствия:)