栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将IP范围存储在Redis中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将IP范围存储在Redis中

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

  • 使用哈希的集合来存储提供者数据
  • 使用zset索引范围的最大值
  • 检索最大值大于IP的(唯一)范围
  • 检查此范围的最小值是否低于IP

例:

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

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

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

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

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

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

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

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390929.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号