Redis研究(八)—有序集合类型 1

一、介绍

sorted set为集合中的每个元素都关联了一个分数,所以可以获得分数最高或者最低的前N个元素,获得指定分数范围内的元素等与分数有关的操作。虽然集合中每个元素都是不同的,但是他们的分数却可以相同。

有序集合类型与列表类型有些相似

(1)二者都是有序的

(2)二者都可以获得某一个范围的元素。

但是二者有很大的区别

(1)列表通过链表实现,获取两端数据速度快,访问中间数据速度慢。

(2)有序集合类型使用散列表和跳跃表实现,获取中间数据也很快(时间复杂度O(log(N)))。

(3)列表不能调整元素位置,有序集合可通过更改分数调整元素位置

(4)有序集合比列表耗内存。

二、命令

1.增加元素

zadd key score member

zadd用来插入元素和该元素的分数,如果元素存在,新值替换旧值。返回加入的元素个数。

记录三名人的分数

可以修改Peter分数

分数不仅可以是整数,还支持双精度浮点数

+inf和-inf分别表示正无穷和负无穷。

2.获得元素的分数

zscore key member

3.获得排名在某个范围内的元素列表

zrange key start stop
zrevrange key start stop

按照分数从小到大返回,负数代表从后向前查找,-1表示最后一个元素

如要一起返回分数

zrange时间复杂度O(logn+m),n为有序集合的基数,m为返回的元素个数。

如果分数相同,按照字典顺序(0-9<A-Z<a-z),中文按照编码方式,UTF-8编码的情况如下、

zrevrange和zrange唯一不同在于前者按照分数从大到小给出结果。

4.获得指定分数范围的元素

zrangebyscore key min max

按照元素分数从小到大返回分数在min和max(包含)的元素:

如果不包含端点值,“(”符号,如含80,但不含100

获得高于80(不包含80),但不知道高分多少。

增加一些值,测试用

现在想获得分数高于60的从第二个人开始的3个人

想获取低于或等于100分的前3个人,

5.增加某个元素的分数

zincrby key increment member

如果指定额元素不存在,Redis执行前会先建立它并将它的分数赋值为0再执行操作。

时间: 2024-10-06 15:02:45

Redis研究(八)—有序集合类型 1的相关文章

Redis研究(九)—有序集合类型 2

上一篇已经讲了一部分有序集合类型的命令了 http://blog.csdn.net/wtyvhreal/article/details/42804571 三.命令拾遗 1.获得集合中元素的数量 zcard key 2.获得指定分数范围内的元素个数 <span style="font-size:14px;">zcount key min max</span> 3.删除一个或者多个元素 <span style="font-size:14px;&quo

15天玩转redis —— 第六篇 有序集合类型

今天我们说一下Redis中最后一个数据类型 “有序集合类型”,回首之前学过的几个数据结构,不知道你会不会由衷感叹,开源的世界真好,写这 些代码的好心人真的要一生平安哈,不管我们想没想的到的东西,在这个世界上都已经存在着,曾几何时,我们想把所有数据按照数据结构模式组成 后灌输到内存中,然而为了达到内存共享的方式,不得不将这块内存包装成wcf单独部署,同时还要考虑怎么序列化,何时序列互的问题,烦心事太多 太多...后来才知道有redis这么个吊毛玩意,能把高级的,低级的数据结构单独包装到一个共享内存

辛星浅析Redis中的有序集合

Redis中的有序集合也就是sorted-set,它和set很相似,都是字符串的集合,都不允许重复的成员出现在一个集合张.有序集合与集合的主要差别是有序集合中的每一个元素都有一个序号与其相连,这个序号即score,Redis通过这个序号来为集合中的成员进行从小到大的排列.需要特别说明的是,尽管有序集合的元素值是唯一的,但是该value对应的score却可以是多个.在有序集合中添加.删除.更新一个成员的操作都很快,其时间复杂度是集合中成员的对数. 因为有序集合中的成员在集合中的位置是有序的,即便是

Redis Sorted Set有序集合 存储操作方法

欢迎大家加入 459479177QQ群进行交流 这一章是Redis Sorted Set有序集合五种方式的最后一种, 首先我们使用redis-cli进入redis [[email protected] ~]# redis-cli  127.0.0.1:6379> 1>zadd 方法:zadd key source1 [key sourceN...] 描述:添加一个或多个有序集合成员元素,如果存在则更新成员的分数值,并插入此成语,确保该成员在正确的位置,如果key不存在则创建一个新的key,然后

redis有序集合类型sort set

redis的数据类型之-有序集合 sort set和set类型一样,也是string类型元素的集合,不同的是sort set每个元素都会关联一个权,通过权值可以有序的获取集合中的元素 sort set类型适合场景: 获得排名最前的5个热门帖子信息(通过帖子回复量标识热门帖子),用sql的做法:select  *  from message order by backnum desc limit 5;但是当数据量足够大时,比如有1亿条数据,这一条sql下去就会耗费大量数据库资源,查询速度也很慢,即

Redis 的数据类型 - Zset 集合类型:有序集合

ZADD:将元素及其分数添加到集合中 语法:ZADD key courseScore member [courseScore member] ZADD courseScore 100 tom ZADD courseScore 99 jerry 88 mario 77 jack 66 lucy 55 chris ZADD courseScore 60 tom 67 apple 56 cherry #这里 tom 已经存在了,直接略过不执行,返回值为 2 # ZADD courseScore 12.

【Redis源码剖析】 - Redis数据类型之有序集合zset

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51231967 这周事情比较多,原本计划每周写两篇文章的任务看来是完不成了.今天为大家带来有序集合zset的源码分析. Redis中的zset主要支持以下命令: zadd.zincrby zrem.zremrangebyrank.zremrangebyscore.zremrangebyrank zrange.zrevrange.zrangebyscore.zrevrangebys

使用 redis (sort set排序集合类型操作)

sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子(回复量)信息: select * from message order by backnum desc limit 5; // 利用 sort set 实现最热门的前 5 贴信息 帖子id            回复量(万条) 11                102        12     

Redis数据操作--有序集合

| Redis 的集合以无序的方式储存多个各不相同的元素 # 用户可以快速地向集合添加元素,或者从集合里面删除元素,也可以对多个集合 进行集合运算操作,比如计算并集,交集和差集. | 元素操作 -- 添加元素     sadd key element [element ...]     # 将一个或多个元素添加到给定的集合里面,已经存在于集合的元素会         自动被忽略,命令返回新添加到集合的元素数量. -- 移除元素     srem key element [element ...]