美文网首页
关于如何高效判断一个IP是否在一个IP段中

关于如何高效判断一个IP是否在一个IP段中

作者: 神仙苏醒 | 来源:发表于2018-10-25 14:36 被阅读0次

第一步,将IP最大和最小值转换成数字,这个有相应的工具类

第二步很关键,就是用redis来存储这两个值,那么什么结构存那?我们选择用sortset,这个结构是有序队列,我们定义:

key:ipwrite

value:ip值

sort:ip数字

比如说我们有多个IP段:

5~10,50~200,300~400 。。。。

ZADD “ranges“ 5 A_start

ZADD “ranges“ 10 A_end

ZADD “ranges“ 50 B_start

ZADD “ranges“ 200 B_end

zrangebyscore ranges (60 +inf LIMIT 0,1 大于60的取第一条

如果在范围内 一定是返回X_end

如果不在这个范围内的 一定是返回X_start

这样我们就存储好了最大值和最小值

第三部,我们拿到要比较的ip,首先转换成数字,然后我们用ranger(0,1)取出最大值和最小值,

zrangebyscore key min max [withscores][limit offset count]

  返回有序集合中score介于min和max之间的元素(若不想包含=请用如 zrangebyscore zsk (1 (4表示),litmit的功能类似于分页,例:zrangebyscore zsk 0 1 withscores limit 0 2返回:

  1) m5

  2) 0.5

  3) m1

  4) 1

当然如果你不知道min和max的值可以使用-inf和+inf来替代。

相关文章

网友评论

      本文标题:关于如何高效判断一个IP是否在一个IP段中

      本文链接:https://www.haomeiwen.com/subject/nftctqtx.html