Redis应用案例 查找某个值的范围
来源:互联网 发布:java解释器是什么 编辑:程序博客网 时间:2024/05/21 11:20
本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就是要判断此IP的所有地。这个问题引来了Redis作者Salvatore Sanfilippo的回答。解答如下: 例如有下面两个范围,10-20和30-40 A_start 10, A_end 20 B_start 30, B_end 40 我们将这两个范围的起始位置存在Redis的Sorted Sets数据结构中,基本范围起始值作为score,范围名加start和end为其value值: redis 127.0.0.1:6379> zadd ranges 10 A_start (integer) 1 redis 127.0.0.1:6379> zadd ranges 20 A_end (integer) 1 redis 127.0.0.1:6379> zadd ranges 30 B_start (integer) 1 redis 127.0.0.1:6379> zadd ranges 40 B_end (integer) 1 这样数据在插入Sorted Sets后,相当于是将这些起始位置按顺序排列好了。 现在我需要查找15这个值在哪一个范围中,只需要进行如下的zrangbyscore查找: redis 127.0.0.1:6379> zrangebyscore ranges (15 +inf LIMIT 0 1 1) "A_end" 这个命令的意思是在Sorted Sets中查找大于15的第一个值。(+inf在Redis中表示正无穷大,15前面的括号表示>15而非>=15) 查找的结果是A_end,由于所有值是按顺序排列的,所以可以判定15是在A_start到A_end区间上,也就是说15是在A这个范围里。至此大功告成。 当然,如果你查找到的是一个start,比如咱们用25,执行下面的命令 redis 127.0.0.1:6379> zrangebyscore ranges (25 +inf LIMIT 0 1 1) "B_start" 返回结果表明其下一个节点是一个start节点,也就是说25这个值不处在任何start和end之间,不属于任何范围。 当然,这个例子仅适用于类似上面的IP范围查找的案例,因为这些值范围之间没有重合。如果是有重合的情况,这个问题本身也就变成了一个一对多的问题。好吧,如果真的是有重合的范围,我们又当如何解决呢?欢迎读者同学你来挑战。
TechTarget中国原创内容,原文链接: http://www.searchdatabase.com.cn/showcontent_53213.htm
© TechTarget中国:http://www.techtarget.com.cn
TechTarget中国原创内容,原文链接: http://www.searchdatabase.com.cn/showcontent_53213.htm
© TechTarget中国:http://www.techtarget.com.cn
0 0
- Redis应用案例,查找某个值的范围
- Redis应用案例,查找某个值的范围
- Redis应用案例 查找某个值的范围
- redis范围查询应用-查找IP所在城市<转>
- redis范围查询应用
- redis 应用范围解析
- 基于有序数据的一些接口,比如二分查找,二分查找某个范围的集合
- Redis集群应用案例
- Search for a Range--查找某个数范围--二分查找
- 二分查找有序数组中某个数的所在范围 Search for a Range
- 产生某个范围的随机数
- 生成某个范围的随机数
- Mac下查找占用某个端口的应用
- 给定范围的二分法查找
- php的应用范围
- python的应用范围
- 查询某个编号的批次范围
- java 产生某个范围随机数的问题
- 预装64位Win8/8.1电脑安装64位Win7详细过程(单/双系统)
- 机器学习中过拟合问题分析及解决方法
- C++设计模式浅识装饰模式
- 工厂模式三部曲-简单工厂模式
- 金额转大写
- Redis应用案例 查找某个值的范围
- Java面向对象--封装private
- 算法之自底向上的归并排序
- final、finally、finalize的区别
- Struts2_声明式异常处理
- 网络流二十四题之二十 —— 深海机器人问题
- day07--scala
- Using cURL to automate HTTP jobs
- 即时通讯技术