Подтвердить что ты не робот

Как искать в 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. Как выполнить поиск заданного значения в заданном поле?

4b9b3361

Ответ 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"

Все, что я сказал, это то, что вы можете сделать это за два шага, поместите любое количество значений, которые вам нужны в ключе, а затем найдите их. Но учтите, что не стоит включать все значения внутри ключа. Просто поставьте те, с которыми вам нужно выполнить фильтрацию. Приветствия:)