首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Redis系列(六)-SortedSets设计技巧

我们通常可以用它进行简单的范围查询,比如把年龄当分数,通过ZRANGEBYSCORE查询某个年龄段的所有用户。...查询18-35年龄的用户: ZRANGEBYSCORE user 18 35 如果有更复杂的需求,比如通过日期,用户类型等来查询,就比较困难了。...user score1 score2 查询当天(分数)下的信息: ZRANGEBYSCORE user score2 score2 更多位信息 r64位整数类型有16个位置,意味着还可以存储更多维度信息...查询前10天的数据: ZRANGEBYSCORE user 151900000 152009999 查询15年19号3578类型的数据: ZRANGEBYSCORE user 152003578 152003578...查询15年19号1000-4000类型的数据: ZRANGEBYSCORE user 152001000 152004000 关于类型往往不是简单的数据类型那么简单,可以做个简单的mapping表。

76660

从有序集合随机取一个值,应该用什么方案?

array_rand() 从数组中随机取出一个值 方法2 zcount key -inf +inf 计算该集合有多少个元素(cnt) rand(1, cnt) 生成一个随机数(random) zrangebyscore...key random random 方法3:对方法2的改造 zcard key 计算该集合有多少个元素(cnt) rand(1, cnt) 生成一个随机数(random) zrangebyscore...key random random 方法4:对方法1的改造 zrangebyscore key -inf +inf array_rand() 从数组中随机取出一个值 方法 1 和方法 4 都是先取出有序集合的所有值...方法 1 和方法 3,即 zrange 和 zrangebyscore 的运行时间对比: 运行时间对比 方法1/zrange 方法3/zrangebyscore 第1次 0.0076210498809814...那如果把方法 1 改成用 zrangebyscore 取出所有值,再随机取元素呢,也就是方法 4,再比较方法 4 和方法 3 的运行时间: 运行时间对比 方法4/zrangebyscore取出数组,随机取出

1.1K10

【Redis实战】有序集合类型(Sorted Set)

文章目录 1、增加元素(ZADD) 2、获得元素的分数(ZSCORE) 3、获得排名在某个范围的元素列表(ZRANGE) 4、获得指定分数范围的元素(ZRANGEBYSCORE) 5、增加某个元素的分数...)   ZRANGEBYSCORE命令参数虽然多,但是都很好理解。...127.0.0.1:6379> ZRANGEBYSCORE scoreboard 80 100 1) "Tom" 2) "David"   如果希望分数范围不包含断点值,可以在分数前加上“(”符号。...例如,希望返回80分到100分的数据,可以含80分,但不包含100分,则稍微修改一下上面的命令即可: 127.0.0.1:6379> ZRANGEBYSCORE scoreboard 80 (100 1...127.0.0.1:6379> ZRANGEBYSCORE scoreboard (80 +inf 1) "Tom" 2) "David"   想获得分数高于60分的从第二个人开始的3个人。

27120

C# CsRedis的初探(六)-- Redis常用命令整理(有序集合类型)

zrevrange 命令和 zrange 的唯一不同在于 zrevrange 是按照元素分数从大到小的顺序给定结果的 ---- 获得指定分数范围内的元素 zrangebyscore...) 如果希望分数范围不包含端点值,可以在分数前加上 "(" 符号,例如:希望返回80分到100分的的数据,可以包含80分单不包含100分 命令:zrangebyscore...比如希望得到所有分数高于 80分(不包含80分)的人的名单,但是却不知道最高分是多少,这是就可以使用 +inf zrangebyscore scoreboard (80 +inf...offset 个元素并且只获取前count个元素 zrevrangebyscore 不仅是按照元素分数从大往小的顺序给出结果,而且他的 min 和max 的参数的顺序和 zrangebyscore...---- 获得指定分数范围内的元素个数 zcount key min max zcount 命令的 min max 参数的特性与 zrangebyscore

1.2K30

基于Redis实现范围查询的IP库缓存设计方案

可以利用Sorted Sets的zrangebyscore命令。...那么我现在如何判断1014版本属于哪个区间呢,使用zrangebyscore如下操作: zrangebyscore myset 1014 +inf LIMIT 0 1 1)v1_end 返回v1..._end说明1014属于版本区间1,上面的这个命令的意思是在myset中查找第一个score值大于等于1014的member,如果我们查找一个不在区间内的版本,比如1016: zrangebyscore...如: (1)将ip转为number,假设得到的值为:3756871650 (2)使用zrangebyscore命令获取所在区间 zrangebyscore ip-country-city-locations-range...hget ip-country-city-locations 3756871424 这并不难实现,但是,耗时却非常严重,可以看下官方文档介绍的Sorted Set的zrangebyscore的时间复杂度

83330

玩转Redis-Redis高级数据结构及核心命令-ZSet

ZSCORE】; 查询排名【ZRANK、ZREVRANK】; 按排名排序查询【ZRANGE、ZREVRANGE】; 按字典顺序排序查询【ZRANGEBYLEX、ZREVRANGEBYLEX】; 按分数排序查询【ZRANGEBYSCORE...则命令需遍历整个集合定位offset,复杂度将增加到O(N); 示例场景 获取指定电话号段,如181开头的电话; 获取指定姓氏的人名,如李XX; ZREVRANGEBYLEX:参数max在前min在后; 【ZRANGEBYSCORE...、ZREVRANGEBYSCORE】按分数排序查询 排序大小写敏感; 分数相同:按字典顺序排序; LIMIT:含义和ZRANGEBYLEX相同; ZREVRANGEBYSCORE的结果:和ZRANGEBYSCORE...member ZRANGE 查询指定【排名区间】的元素(和分数) key start stop [WITHSCORES] ZREVRANGE 【逆序】查询指定【排名区间】的元素(和分数) 同【ZRANGE】 ZRANGEBYSCORE

1.4K10
领券