您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将IP范围存储在Redis中

将IP范围存储在Redis中

这取决于您是否认为您的IP范围可以重叠。如果不是,则解决方案非常简单:

例:

这是我的提供者。他们每个人都有一个ID标识。请注意,我可以为每个提供程序添加更多属性

> hmset providers:1 name P1 min 3232235786 max 3232235826
OK
> hmset providers:2 name P3 min 1232235786 max 1232235826
OK
> hmset providers:3 name P3 min 2232235786 max 2232235826
OK
> hmset providers:4 name P4 min 4232235786 max 4232235826
OK

每次在系统中添加提供程序时,都必须维护索引(手动:这是Redis,而不是关系数据库)。分数是最大值,成员是范围的ID。

> zadd providers:index 3232235826 1 1232235826 2 2232235826 3 4232235826 4
(integer) 4
> zrange providers:index 0 -1
1) "2"
2) "3"
3) "1"
4) "4"

现在要查询与IP地址相对应的唯一范围,您需要2次往返:

> zrangebyscore providers:index 3232235787 +inf LIMIT 0 1
1) "1"
> hgetall providers:1
1) "name"
2) "P1"
3) "min"
4) "3232235786"
5) "max"
6) "3232235826"

然后,客户端程序只需检查您的IP大于或等于返回范围的最小地址即可。

现在,如果您认为范围可以重叠,则解决方案要复杂得多,并且已经在此处进行了说明。

其他 2022/1/1 18:16:18 有659人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶