Redis应用案例,查找某个值的范围(转)
本文来自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应用案例,查找某个值的范围(转)相关推荐
- Redis应用案例 查找某个值的范围
本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就 ...
- Redis简单案例(四) Session的管理
Redis简单案例(四) Session的管理 原文:Redis简单案例(四) Session的管理 负载均衡,这应该是一个永恒的话题,也是一个十分重要的话题.毕竟当网站成长到一定程度,访问量自然也是 ...
- SpringBoot 使用 Redis Geo 实现查找附近的位置-附近的人功能
SpringBoot 使用 Redis Geo 实现查找附近的位置 6个操作命令 Redis 命令 描述 GEOADD 增加某个地理位置的坐标 GEOPOS 获取某个地理位置的坐标 GEODIST 获 ...
- Redis 秒杀案例
Redis 秒杀案例 文章目录 Redis 秒杀案例 实现 ab工具模拟并发 超卖和超时问题解决 配置JedisPool连接池来解决超时问题 利用乐观锁淘汰用户,解决超卖问题 库存遗留问题解决 什么是 ...
- 【SQL开发实战技巧】系列(十五):查找最值所在行数据信息及快速计算总和百之max/min() keep() over()、fisrt_value、last_value、ratio_to_report
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名) 目录
- Redis简单案例(二) 网站最近的访问用户
原文:Redis简单案例(二) 网站最近的访问用户 我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我 ...
- Redis教程:NoSQL键值存储
课程大纲 Redis是使用ANSI C编写的具有可选持久性的开源,网络化,内存中键值数据存储.根据DB-Engines.com的月度排名,Redis是最受欢迎的键值存储. 它的名字意思是远程字典服务器 ...
- redis将散裂中某个值自增_0基础掌握Django框架(49)Redis
为了更好的学习效果,请搭配视频教程一起学习: Django零基础到项目实战 - 网易云课堂study.163.com redis教程: 概述 redis是一种nosql数据库,他的数据是保存在内存中 ...
- Redis简单案例(三) 连续登陆活动的简单实现
原文:Redis简单案例(三) 连续登陆活动的简单实现 连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送 ...
最新文章
- JS面向对象编程实现
- C程序对整数中设置为1的位数进行计数
- python网站设计开题报告_网站设计开题报告范文精选5篇
- 甲流疫情死亡率(信息学奥赛一本通-T1011)
- ip受限 linux_从linux源码看epoll及epoll实战揭秘
- 搬家请搬家公司好还是请朋友帮忙好?
- 对程序员来说,创业公司和大公司应该怎么抉择?
- 6.解决循环依赖的问题
- HighCharts使用更多图表HighChartsMore
- 一个好用的在线java反编译工具
- 系统建模之状态图,活动图
- 做正确的事(效果)比正确的做事(效率)更重要
- iphone禁止自动连接wifi操作方法「苹果教程」
- 蓝桥杯--数字排列的Python解法
- 小米笔记本U盘win10换win7系统操作教程
- html安全区怎么设置,[GEE引擎]自定义安全区形状的设置方法
- 简单的HANGMAN游戏
- 继承 封装 多态 (基础)描述性理解
- matlab 模拟 峰信号
- 破解TP-Link路由-嗅探PPPoE拨号密码