本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就是要判断此IP的所有地。这个问题引来了Redis作者Salvatore Sanfilippo(@antirez)的回答。解答如下:

例如有下面两个范围,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范围查找的案例,因为这些值范围之间没有重合。如果是有重合的情况,这个问题本身也就变成了一个一对多的问题。

Redis应用案例,查找某个值的范围(转)相关推荐

  1. Redis应用案例 查找某个值的范围

    本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就 ...

  2. Redis简单案例(四) Session的管理

    Redis简单案例(四) Session的管理 原文:Redis简单案例(四) Session的管理 负载均衡,这应该是一个永恒的话题,也是一个十分重要的话题.毕竟当网站成长到一定程度,访问量自然也是 ...

  3. SpringBoot 使用 Redis Geo 实现查找附近的位置-附近的人功能

    SpringBoot 使用 Redis Geo 实现查找附近的位置 6个操作命令 Redis 命令 描述 GEOADD 增加某个地理位置的坐标 GEOPOS 获取某个地理位置的坐标 GEODIST 获 ...

  4. Redis 秒杀案例

    Redis 秒杀案例 文章目录 Redis 秒杀案例 实现 ab工具模拟并发 超卖和超时问题解决 配置JedisPool连接池来解决超时问题 利用乐观锁淘汰用户,解决超卖问题 库存遗留问题解决 什么是 ...

  5. 【SQL开发实战技巧】系列(十五):查找最值所在行数据信息及快速计算总和百之max/min() keep() over()、fisrt_value、last_value、ratio_to_report

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  6. Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)

    Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名) 目录

  7. Redis简单案例(二) 网站最近的访问用户

    原文:Redis简单案例(二) 网站最近的访问用户 我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我 ...

  8. Redis教程:NoSQL键值存储

    课程大纲 Redis是使用ANSI C编写的具有可选持久性的开源,网络化,内存中键值数据存储.根据DB-Engines.com的月度排名,Redis是最受欢迎的键值存储. 它的名字意思是远程字典服务器 ...

  9. redis将散裂中某个值自增_0基础掌握Django框架(49)Redis

    为了更好的学习效果,请搭配视频教程一起学习: Django零基础到项目实战 - 网易云课堂​study.163.com redis教程: 概述 redis是一种nosql数据库,他的数据是保存在内存中 ...

  10. Redis简单案例(三) 连续登陆活动的简单实现

    原文:Redis简单案例(三) 连续登陆活动的简单实现 连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送 ...

最新文章

  1. JS面向对象编程实现
  2. C程序对整数中设置为1的位数进行计数
  3. python网站设计开题报告_网站设计开题报告范文精选5篇
  4. 甲流疫情死亡率(信息学奥赛一本通-T1011)
  5. ip受限 linux_从linux源码看epoll及epoll实战揭秘
  6. 搬家请搬家公司好还是请朋友帮忙好?
  7. 对程序员来说,创业公司和大公司应该怎么抉择?
  8. 6.解决循环依赖的问题
  9. HighCharts使用更多图表HighChartsMore
  10. 一个好用的在线java反编译工具
  11. 系统建模之状态图,活动图
  12. 做正确的事(效果)比正确的做事(效率)更重要
  13. iphone禁止自动连接wifi操作方法「苹果教程」
  14. 蓝桥杯--数字排列的Python解法
  15. 小米笔记本U盘win10换win7系统操作教程
  16. html安全区怎么设置,[GEE引擎]自定义安全区形状的设置方法
  17. 简单的HANGMAN游戏
  18. 继承 封装 多态 (基础)描述性理解
  19. matlab 模拟 峰信号
  20. 破解TP-Link路由-嗅探PPPoE拨号密码

热门文章

  1. 切勿版本化Web API
  2. Visual studio 快捷键大全
  3. 如何让ssh登录时不提示是否要添加HostKey
  4. JQuery 表单校验插件 validate 使用纪录
  5. CentOS安装tomcat
  6. DNS与Active Directory在两台服务器分别布署
  7. 英特尔未来教育核心课程
  8. linux线程栈溢出与局部变量,Linux下和core说再见之:栈溢出
  9. 酶促反应动力学_酶促反应动力学实验
  10. Linux Kernel TCP/IP Stack — L3 Layer