我正在使用哈希键来存储用户的详细信息,例如:
hmset user:1 user_name lee age 21
hmset user:2 user_name david age 25
hmset user:3 user_name chris age 25
我需要搜索年龄为 25,姓名为 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
我需要搜索年龄为 25,姓名为 lee 的用户。如何在给定字段中搜索指定值?
你不能这样做。Redis是一个键值存储,而不是关系型数据库。
为了搜索特定数据,您需要建立一个访问路径以访问这些数据。例如,要获取年龄为25岁的用户,您需要建立一个映射年龄值到用户的索引。可以使用set完成此操作。名称也是同样如此。
一旦您有了年龄和名称的集合,就可以通过交集来搜索用户。例如:
# 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
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
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"
SCAN 是在 Redis v6.0 及以上版本 中推荐的搜索键的方式。
127.0.0.1:6379> SCAN 0 TYPE hash COUNT 1000000
需要将COUNT作为最后一个参数传递,否则默认只返回10条记录的限制。