gpt4 book ai didi

redis - 使用 Redis 检查 IP 是否在一个范围内

转载 作者:IT王子 更新时间:2023-10-29 06:05:28 25 4
gpt4 key购买 nike

我对使用 Redis 检查 IP 地址(转换为整数)是否在 IP 范围内很感兴趣。范围很可能会重叠。

我找到了 this问题/答案,尽管我无法完全理解其背后的逻辑。

感谢您的帮助!

最佳答案

编辑 - 因为我得到了反对票(解释为什么会很好的评论),我从我的回答中删除了一些困惑。

@DidierSpezia 在您的链接问题中的回答是一个很好的答案,但如果您要添加/删除范围,则很难维护。

However it is not trivial (and expensive) to build and maintain it.

我有一个更容易维护的答案,但计算许多范围可能会变得缓慢且内存昂贵,因为它需要克隆一组所有范围。

您需要将所有范围保存两次,分为两组。每个范围的分数将是它的边界值。

使用@DidierSpezia 示例中的集合:

A 2-8
B 4-6
C 2-9
D 7-10

你的两组将是:

ZADD ranges:low 2 "2-8" 4 "4-6" 2 "2-9" 7 "7-10"
ZADD ranges:high 8 "2-8" 6 "4-6" 9 "2-9" 10 "7-10"

查询一个值属于哪些范围,需要裁剪下边界高于查询值的范围,裁剪上边界低于查询值的范围。

我能想到的最有效的方法是克隆其中一组,按照上面给出的规则修剪其中一侧,更改范围的分数以反射(reflect)另一个边界,然后修剪第二侧。

以下是查找 5 所属范围的方法:

    ZUNIONSTORE tmp 1 ranges:low
ZREMRANGEBYSCORE tmp (5 +inf
ZINTERSTORE tmp 2 tmp ranges:high WEIGHTS 0 1
ZREMRANGEBYSCORE tmp -inf (5
ZRANGE tmp 0 -1

关于redis - 使用 Redis 检查 IP 是否在一个范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33015904/

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