我正在使用哈希键来存储用户详细信息,例如:
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
。如何在给定字段中搜索指定值?
我正在使用哈希键来存储用户详细信息,例如:
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
。如何在给定字段中搜索指定值?
你不能。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
Acually 您可以通过将值放入键中来做到这一点
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"
我所说的只是你可以分两步完成,把你需要的任意数量的值放在键中,然后找到它们。但是请考虑将所有值放入 key 中并不是一个好主意,只需放入您需要进行过滤的值即可。干杯:)