redis实现区间查询
###redis实现区间查询
在实际开发中经常遇到这样需求:服务端对于客户端不同的版本区间会做些不同的配置,那么客户端一个版本过来怎么快速的定位是属于哪个版本区间呢?可以利用`Sorted Sets`的`zrangebyscore`命令。
```
zadd myset 1011 v1_start
zadd myset 1015 v1_end
zadd myset 1018 v2_start
zadd myset 1023 v2_end
```
如上我们像myset里插入了4条数据,代表的意思是版本区间v1是从1011-1015版本,版本区间v2是从1018-1023版本。
注:redis的Sorted Sets需要score必须为float型,所以这里需要对版本号做一个等价的转换。
那么我现在如何判断1014版本属于哪个区间呢,使用zrangebyscore如下操作:
```
zrangebyscore myset 1014 +inf LIMIT 0 1
1)v1_end
```
返回v1_end说明1014属于版本区间1,上面的这个命令的意思是在myset中查找第一个score值大于等于1014的member,如果我们查找一个不在区间内的版本,比如1016:
```
zrangebyscore myset 1014 +inf LIMIT 0 1
1)v2_start
```
返回v2_start说明它不已有的版本区间内。
关于该命令的具体用法可以看这里[这里][1]。 不过这种用法不适合那些区间之间存在重叠的场景。
###实现一个hash里不同的field拥有不同expire的场景 目前redis不支持这个特性,这是redis的设计原则决定的。可以在Hash中每个field对应的value本身含有时间的信息,让应用自己去理解和处理。 ![][2]
###在redis里维护自增长的主键
有时候可能需要在redis的多个数据结构之间维护一个类似关系型数据库中的自增长主键,可以利用Sorted Sets的ZINCRBY ```
zincrby myset 1 config_no
1)2
```
上面的意思是将myset中的config_no的score值加1,让key不存在或member不存在时上面的命令相当于: ```
zadd myset 1 config_no
1)1
``` [1]: http://manual.csser.com/redis/sorted_set/zrangebyscore.html
[2]: http://zhanjindong.info/wp-content/uploads/2014/02/11.png
redis实现区间查询的更多相关文章
- Redis 基本操作
参考网址:http://doc.redisfans.com/ redis 在操作的时候,不区分大小写(包括php) Key(键) DEL key [key ...] 删除给定的一 ...
- Redis数据结构之skiplist(续)
本文摘抄于<Redis内部数据结构详解-skiplist> 一.skiplist的由来 skiplist,顾名思义,首先它是一个list.实际上,它是在有序链表的基础上发展起来的. 我们先 ...
- Redis 为什么用跳表而不用平衡树
Redis 为什么用跳表而不用平衡树? 本文是<Redis内部数据结构详解>系列的第六篇.在本文中,我们围绕一个Redis的内部数据结构--skiplist展开讨论. Redis里面使用s ...
- Redis中为什么使用跳表---------转自http://blog.csdn.net/u010412301/article/details/64923131
最近在研究数据库的一些底层实现,百度的面试官问到了跳表,当时没有回答上来,在csdn上看到了这篇文章,感觉写的比较好,希望大家可以多多交流. Redis里面使用skiplist是为了实现sorted ...
- redis常用笔记(第一版)
1.SINTER 说明:多key之间取交集数据 key1 = {a,b,c,d} key2 = {c} key3 = {a,c,e} SINTER key1 key2 key3 = {c} 2.sad ...
- 【转】Redis为什么用跳表而不用平衡树?
Redis里面使用skiplist是为了实现sorted set这种对外的数据结构.sorted set提供的操作非常丰富,可以满足非常多的应用场景.这也意味着,sorted set相对来说实现比较复 ...
- 探索Redis设计与实现6:Redis内部数据结构详解——skiplist
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 数据结构与算法简记--redis有序集合实现-跳跃表
跳表 定义 为一个值有序的链表建立多级索引,比如每2个节点提取一个节点到上一级,我们把抽出来的那一级叫做索引或索引层.如下图所示,其中down表示down指针,指向下一级节点.以此类推,对于节点数为n ...
- 【转】Redis内部数据结构详解 -- skiplist
本文是<Redis内部数据结构详解>系列的第六篇.在本文中,我们围绕一个Redis的内部数据结构--skiplist展开讨论. Redis里面使用skiplist是为了实现sorted s ...
随机推荐
- lua -- 点击关闭窗口中的子界面
function UIBagController:initBoxView( ) self.panelBox = tolua.cast(UIHelper:seekWidgetByName(self.ow ...
- 深度学习领域的Papers
https://github.com/songrotek/Deep-Learning-Papers-Reading-Roadmap 深度学习论文阅读路线图 Deep Learning Papers R ...
- 每日英语:How the College Bubble Will Pop
The American political class has long held that higher education is vital to individual and national ...
- JAVA Zero Copy的相关知识【转】
转自:https://my.oschina.net/cloudcoder/blog/299944 摘要: java 的zero copy多在网络应用程序中使用.Java的libaries在linux和 ...
- STL之std::set、std::map的lower_bound和upper_bound函数使用说明
由于在使用std::map时感觉lower_bound和upper_bound函数了解不多,这里整理并记录下相关用法及功能. STL的map.multimap.set.multiset都有三个比较特殊 ...
- Ubuntu 14.04快速搭建SVN服务器及日常使用
1.介绍 Subversion是一个自由,开源的版本控制系统,这个版本库就像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况.这样就可以很方面恢复到以前的版本,并可以查看数据更改 ...
- python 中文编码(一)
我在学python的过程中,遇到的第二个问题,就是中文乱码,如今也算勉强入门了,在这里给大家说说我的经验,也算个新人引导吧. 在文章里,我会重点提到一个概念:有来有去. 即数据从哪里来,到哪里 ...
- 前端弹窗展示后台html文件
1,首先使用window.open函数,弹出返回jsp页面的窗口,对应viewZhengXinReport()方法,进行jsp页面的请求跳转forward 2,然后在jsp页面中使用ajax同步请求后 ...
- 基于HTML5手机登录注册表单代码
分享一款基于HTML5手机登录注册表单代码.这是一款鼠标点击注册登录按钮弹出表单,适合移动端使用.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=&qu ...
- webscan v0.01
ps:本人不是写代码的料.写出来的贼垃圾.大牛看了如果有可以优化的提出来哈. #by def import urllib res = {} website = raw_input() if " ...