"some_data-6ren">
gpt4 book ai didi

redis - 使用redis在一组键中搜索键

转载 作者:IT王子 更新时间:2023-10-29 06:15:03 26 4
gpt4 key购买 nike

这就是我想要做的;我有一堆数字(整数) block 不一定是连续的,它们有一些相关的数据形式:

<from>-<to> -> <data> 

.即:

0-9   -> "some_data_a"
10-15 -> "some_data_b"
20-25 -> "some_data_c"

所以现在我得到,比方说,数字 22,所以我将不得不以某种方式从 redis 中检索“some_data_c”。我在考虑拥有像这样的 key :

blocks:0:9
blocks:10:15
blocks:20:25

但我还没有找到像这样进行关键范围搜索的方法:

redis-cli> keys block:[from <= 22]:[22 <= to]
blocks:20:25

我需要尽可能高效地执行此操作。有什么想法吗?

最佳答案

假设范围是互斥的,只需保留一个有序集合,每个成员的分数是范围的上限。按照您示例中的数据,这基本上会导致:

ZADD upper 5 "data:0-5" 15 "data:10-15” 25 "data:20-25"

对下界做同样的事情:

ZADD lower 0 "data:0-5" 10 "data:10-15” 20 " data:20-25"

最后,您需要创建对应于集合成员的键 - 这些键将保存实际数据:

SET data:0-5 "some_data_a"
SET data:10-15 "some_data_b"
SET data:20-25 "some_data_c"

现在,要获得结果,请执行以下操作:

ZRANGEBYSCORE upper 22 +inf LIMIT 0 1
ZREVRANGEBYSCORE lower -inf 22 LIMIT 0 1

(假设你正在寻找 22 的数据)

如果您要查找的数字存在于范围 block 中,则两个 Z*RANGE 命令都应返回相同的数据。不在范围内的值将导致 Z*RANGE 之一返回 nil。一旦你有两个非零结果,获取由集合成员命名的键(即获取数据:20-25)。

关于redis - 使用redis在一组键中搜索键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24171209/

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