- 有序集合类型的概念
- 有序集合类型的底层实现
- 有序集合类型的应用场景
有序集合类型概念
sorted set 是 set 的一个升级版本,它在set的基础上增加了一个顺序属性(元素关联了一个分数),这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的 mysql 表,一列存 value,一列存顺序。操作中 key 理解为 zset 的名字。
底层实现
Redis 有序集合类型使用两种数据结构作为底层实现:
1. 压缩列表
2. 跳跃表
当有序集合对象保存的所有元素数量不超过128且元素成员长度都小于64字节时使用压缩列表;不满足这个条件的集合对象跳跃表。
当跳跃表(skiplist)是一种随机化的数据,这种数据结构以有序的方式在层次化的链表中保存元素,它的效率可以和平衡树媲美——查找、删除、添加等操作都可以在对数期望时间下完成,并且比起平衡树来说,跳跃表的实现要简单直观得多。
底层实现
Sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构;使用sorted set可以固件有优先级的队列系统、排行榜应用、取top n操作。
有序集合类型与列表的比较,相同点:
二者都是有序的。
二者都可以获得某一范围的元素。
不同点:
列表通过链表实现,获取靠近两端的数据速度快,适合“新鲜事”和“日志”。
有序集合使用散列表和跳跃表实现,读取中间数据速度也快。
列表不能简单的调整元素的位置,而有序集可以。
有序集合比列表类型更耗内存。
Redis 有序集合类型的命令操作
- zadd、zrem与zcard命令
- 跟有序集合元素分数相关的命令
- 跟有序集合元素排名相关的命令
- 计算交集并集命令
ZADD
语法:ZADD key score member
解释:用来向有序集合中添加一个元素和该元素的分数,返回值表示成功加入的元素数量(不包含原来已经存在的元素)。可一次添加多个元素及其元素的分数。
ZREM
语法:ZREM key member
解释:用来删除一个或多个元素,返回值表示成功删除的元素数量。
ZCARD
语法:ZCARD key
解释:用来获得集合中元素的数量。
ZSCORE
语法:SCORE key member
解释:用来获得元素的分数。
ZINCRBY
语法:ZINCRBY key increment member
解释:用来增加一个元素的分数,返回值是更改后的分数。
ZRANGEBYSCORE
语法:ZRANGEBYSCORE key min max [ WITHSCORES ] [ LIMIT offset count ]
解释:按照分数从小到大的顺序返回分数在 min 和 max (包含 min 和 max)之间的元素。
若不包含端点,可在分数前加上“(”
Min 和 max 支持无穷大 inf
Withscore 返回的数据格式为 元素+分数
LIMIT 表示在获得元素的基础上从第 offset 个开始的 count 个元素
ZCOUNT
语法:ZCOUNT key min max
解释:用来获得指定分数范围内的元素个数。
ZREMRANGEBYSCORE
语法:ZREMRANGEBYSCORE key min max
解释:按照分数范围删除元素,返回值是删除的元素数量。
ZRANGE(ZREVRANGE)
语法:ZRANGE(ZREVRANGE) key start stop [ WITHSCORES ]
解释:按照元素分数从小(大)到大(小)的顺序返回索引从 start 到 stop 之间的所有元素。
ZRANK(ZREVRANK)
语法:ZRANK (ZREVRANK) key member
解释:用来获得元素的排名,分数最小(大)的排名为0。
ZREMRANGEBYRANK
语法:ZREMRANGEBYRANK key start stop
解释:此命令用来删除指定排名范围内的所有元素,并返回删除的元素数量。
ZINTERSTORE
语法:ZINTERSTORE dest numkeys key [key …] [ WEIGHTS weight ]
[ AGGREGATE SUM|MIN|MAX ]
解释:此命令用来计算多个有序集合的交集并将结果存储在 dest 键中,返回值为 dest 键中的元素个数。
WEIGHTS 参数设置每个集合的权重,运算时,内部元素分数乘以该集合的权重
AGGREGATE 参数用来决定 dest 键中元素的分数,可求和、最大值、最小值
- 大小: 50.8 KB
- 大小: 24.8 KB
分享到:
相关推荐
在JAVA中使用Redis有序集合类型的常用命令的演示及一个简单的实战项目: 具备增删改查和分类查找及按浏览量排序的商品管理功能
Redis 有序集合命令命令及描述ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在
1.1 列表 1.1.1 命令 1.1.2 内部编码 1.1.3 使用场景 1.2 集合 1.2.1 命令 1.2.2 内部编码 1.2.3 使用场景 1.3
Redis中的有序集合类型,实际上是在集合类型上,为每个元素都关联一个分数,有序实际上说的是分数有序,我们根据分数的范围获取集合及其他操作。集合的元素依然是不能够相同的,但是分数可以相同。 下面列举有序集合...
今天通过本文给大家说一下Redis中最后一个数据类型 “有序集合类型”,需要的的朋友参考下吧
redis命令集合,redis命令详解 适合全体类型的命令 EXISTS key 判断一个键是否存在;存在返回 1;否则返回0; DEL key 删除某个key,或是一系列key;DEL key1 key2 key3 key4 TYPE key 返回某个key元素的数据类型 ( none:...
前言 游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。...
主要介绍了使用Redis有序集合实现IP归属地查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
3.Redis数据类型之List类型
Redis中SortedSet(有序集合)的个人总结
redis面试题 redis面试题之概述_介绍一下redis
这是我个人这段时间学习Redis的集合,有Redis的简单测试,Redis的Cluster集群、Redis的Sentinel主从集群、Tomcat+Redis的Session存储、还有基于Spring-data-redis的使用。分享出来给大家,下载可以直接使用,快速...
Redis从入门到精通高清,迅雷播放器组件可顺利播放
使用Java操作Redis的字符串类型、list链表类型、hash哈希表类型、set无序集合类型的数据,简单易懂。
redis命令集合及入门案例,redis缓存命令,set 添加key-value set username admin,set 添加key-value set username admin
在JAVA中使用Redis集合类型的常用命令的演示及一个简单的实战项目: 具备增删改查和分类查找的商品管理功能 代码介绍: http://blog.csdn.net/autfish/article/details/51734686
Redis的安装 Redis 概述与数据结构 Redis的5种数据结构