redisview如何查询_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值