gpt4 book ai didi

Redis 通配符搜索和返回哈希值(%word)

转载 作者:可可西里 更新时间:2023-11-01 11:20:40 33 4
gpt4 key购买 nike

我用的是Redis 3.0.6

我正在尝试使用 Redis 创建自动完成功能。我在哈希表中保留了三项内容:乐队名称、级别和成立年份。

我想进行通配符搜索,以获取以特定字母开头的乐队名称及其附加特征,例如他们的军衔和年份。

我该怎么做?是否可以立即执行或我是否需要子查询来获取它们的属性?

HMSET 3doorsdown rank 7 year 2003
OK
127.0.0.1:6379> HMSET adele rank 1 year 2005
OK
127.0.0.1:6379> HMSET almora rank 3 year 1995
OK
127.0.0.1:6379> HMSET amiina rank 2 year 2009
OK
127.0.0.1:6379> HMSET anathema rank 4 year 1990
OK
127.0.0.1:6379> HMSET birdy rank 6 year 2012
OK
127.0.0.1:6379> HMSET blink182 rank 5 year 1999
OK

SCAN 0 match a* COUNT 1000 返回所有以 a 开头的记录,但不返回它们的排名和年份。

1) "0"
2) 1) "adele"
2) "almora"
3) "anathema"
4) "amiina"
127.0.0.1:6379>

https://stackoverflow.com/a/33625191/3210431

我没有使用 KEYS,因为它很昂贵,但也有人说 SCAN 也很昂贵(上文)。

我该怎么办?我是否需要将名称保留在 SET 中,通过 SCAN 进行匹配,如果匹配,我应该按名称在 HASHES 中单独查找这些记录,如下所示?

1-) 在 SET 中查找以 a 开头的乐队名称

2-)返回4条记录

3-) 在HASHES中通过HGETALL获取他们的特征


编辑:我有另一个想法。我将名称保存在一个 SET 中,使用 ZRANGEBYLEX 并在 HASH 中执行另一个查询以获取属性,但我不知道哪个是正确的方法。

最佳答案

Antirez 写了一个 article about autocomplete您可能会发现有用并可以从中获得一些想法,但本质上:

使用 SCAN 会很昂贵,并且会看到您遍历整个 key 集,因此排序集将是更好的方法。您可以在场景中使用字典排序来为您完成大部分繁重的工作。缺点是您正在用内存换取速度。一旦你有了匹配的键,你就可以执行 HGETALL 来获取匹配的记录。如果您担心往返时间,您可以将所有这些组合到一个 lua 脚本中(我会推荐这个)。

关于Redis 通配符搜索和返回哈希值(%word),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174260/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com