Redis学习-SortedSet
Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行的排序。尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。
常用命令
|
命令 |
时间复杂度 |
描述 |
返回值 |
|
ZADD key score member [[score member] ...] |
O(M*log(N)),N 是基数,M为新成员的数量。 |
将一个或多个member元素及其score值加入到有序集key当中.如果member已经是有序集的成员,那么更新这个member的 score值,并通过重新插入这个member元素,来保证该member 在正确的位置上.score值可以是整数值或双精度浮点数.如果 key不存在,则创建一个空的有序集并执行ZADD操作.当key存在但不是有序集类型时,返回一个错误. |
被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。 |
|
ZCARD |
O(1) |
当key存在且是有序集类型时,返回有序集的基数.当key不存在时,返回0 。 |
|
|
ZCOUNT key min max |
O(log(N)),N为有序集的基数。 |
返回有序集key中,score值在min和max之间(默认包括 score 值等于min或max )的成员的数量。 |
|
|
ZINCRBY key increment member |
O(log(N)) |
为有序集key的成员member的score值加上增量increment.可以通过传递一个负数值increment ,让score减去相应的值,比如 ZINCRBY key -5 member.当key不存在,或membe不是key的成员时,INCRBY key increment member等同于 ZADD key increment member.当key不是有序集类型时,返回一个错误. |
member 成员的新score 值,以字符串形式表示. |
|
ZRANGE key start stop [WITHSCORES] |
O(log(N)+M),为有序集的基数,M为结果集的基数。 |
返回有序集key中,指定区间内的成员(按score值递增排序).相同score值的成员按字典序来排列.如果需要按score值递减来排列,使用 ZREVRANGE 命令.下标参数start和stop都以0为底.可以使用负数下标,-1表示最后一个成员,-2表示倒数第二个成员.超出范围的下标并不会引起错误。比如说,当start的值比有序集的最大下标还要大,或是start > stop时,ZRANGE命令只是简单地返回一个空列表;假如stop参数的值比有序集的最大下标还要大,将stop当作最大下标来处理。WITHSCORES选项让成员和它的 score值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。 |
指定区间内,带有 score 值(可选)的有序集成员的列表。 |
|
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] |
O(log(N)+M),N 为有序集的基数,M 为被结果集的基数。 |
返回有序集key中,所有score值介min和max之间(包括等于 mi或max )的成员。有序集成员按score值递增次序排列,具有相同 score 值的成员按字典序来排列.可选的 LIMIT 参数指定返回结果的数量及区间.注意当offset很大时,定位offset的操作可能需要遍历整个有序集,此过程最坏复杂度O(N)时间。min和max可以是-inf和+inf .默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。 |
指定区间内,带有 score 值(可选)的有序集成员的列表。 |
|
ZRANK key member |
O(log(N)) |
返回有序集key中成员member的排名.其中有序集成员按score值递增顺序排列.排名以0为底。使用 ZREVRANK 命令可以获得成员按score值递减排列的排名。 |
member是有序集 key的成员,返回的排名.如果不是返回 nil 。 |
|
ZREM key [member ...] |
O(M*log(N)),N为基数,M为被成功数量。 |
移除有序集key中的一个或多个成员,不存在的成员将被忽略。当key存在但不是有序集类型时,返回一个错误。 |
被成功移除的成员的数量,不包括被忽略的成员。 |
|
ZREMRANGEBYRANK key start stop |
O(log(N)+M),N 为基数,而M 为被移除数量。 |
移除有序集key中,指定排名(rank)区间内的所有成员. 区间分别以下标参数start和stop指出,包含start和 stop在内。可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员。 |
被移除成员的数量。 |
|
ZREMRANGEBYSCORE key min max |
O(log(N)+M),N为数,而M为被移除数量。 |
移除有序集key中,所有score值介于min和max之间(包括等于min或max )的成员。 |
被移除成员的数量。 |
|
ZSCORE key member |
O(1) |
返回有序集key中,成员member的score值。如果 member不存在,或key不存在,返回nil 。 |
成员的score 值 |
|
UNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] |
O(N)+O(M log(M)), N 为给定有序集基数的总和, M 为结果集的基数。 |
计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score值是所有给定集下该成员 score值之和。使用 WEIGHTS 选项,可以为每个给定有序集分别指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。乘法因子默认设置为 1 。使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。默认使用的参数SUM ,可以将score 值之和作为结果集中该成员的score值;使用参数MIN,将最小score值作为结果集中该成员的score值;而参数MAX则是将最大score值作为结果集中该成员的 score 值。 |
保存到 destination 的结果集的基数。 |
|
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] |
计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和. |
保存到 destination 的结果集的基数。 |
|
|
ZLEXCOUNT key min max |
O(log(N)),N为有序集合包含的元素数量。 |
对于一个所有成员的分值都相同的有序集合键key来说,这个命令会返回该集合中,成员介于min和max范围内的元素数量。 |
|
|
ZREMRANGEBYLEX key min max |
对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。 |
||
|
ZRANGEBYLEX key min max [LIMIT offset count] |
当有序集合的所有成员都具有相同的分值时,有序集合的元素会根据成员的字典序来进行排序,而这个命令则可以返回给定的有序集合键 key中,值介于min和max 之间的成员.如果有序集合里面的成员带有不同的分值, 那么命令返回的结果是未指定的(unspecified)。命令会使用 C 语言的 memcmp() 函数,对集合中的每个成员进行逐个字节的对比(byte-by-byte compare), 并按照从低到高的顺序, 返回排序后的集合成员。 如果两个字符串有一部分内容是相同的话, 那么命令会认为较长的字符串比较短的字符串要大。 |
应用范围
- 可以用于一个大型在线游戏的积分排行榜。每当玩家的分数发生变化时,可以执行ZADD命令更新玩家的分数,此后再通过ZRANGE命令获取积分TOP TEN的用户信息。当然我们也可以利用ZRANK命令通过username来获取玩家的排行信息。最后我们将组合使用ZRANGE和ZRANK命令快速的获取和某个玩家积分相近的其他用户的信息。
- Sorted-Sets类型还可用于构建索引数据。
Redis学习-SortedSet的更多相关文章
- Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash
引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...
- Redis 学习手册
一:Redis的简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包 ...
- Redis学习笔记(二) Redis 数据类型
Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...
- redis学习(一)
Redis学习内容: 1. 概念 2. 下载安装R 3. 命令操作 1. 数据结构 4. 持久化操作 5. 使用Java客户端操作redis 1. 概念: redis是一款高性能的NOSQL系列的非关 ...
- redis 学习导航
一.redis学习流程 二.redis官方网址: 官方网址:https://redis.io/ 三.redis简介 1. redis是一个基于内存,单线程的key-value的非关系型数据库,整个数据 ...
- Redis学习手册(目录)
为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
随机推荐
- 自己开发图表插件,脱离echart
前言 由于公司业务需要做一些图标来展示一些数据,之前都是用百度的echart.js.这次放弃使用它转而自己开发是有几个原因1.echart文件太大,有些功能用不到2.echart样式不易扩展3.需求简 ...
- git生成ssh key及github ssh key对接
首先在本地安装好git工具并配置好环境变量 创建一个文件夹,在此处打开git bash: 命令>cd ~/.ssh 查看是否已经配置ssh 命令>git config --global ...
- 【C++】浅谈三大特性之一继承(三)
四,派生类的六个默认成员函数 在继承关系里,如果我们没有显示的定义这六个成员函数,则编译系统会在适合场合为我们自动合成. 继承关系中构造函数和析构函数的调用顺序: class B { public: ...
- Luogu3373【模板】线段树2
P3373[模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行 ...
- 读书笔记 effective c++ Item 43 了解如何访问模板化基类中的名字
1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息.消息可以以加密或者明文(未加密)的方式被发送.如果在编译阶段我们有足够的信息来确定哪个信息会 ...
- 使用VB6写一个自定义的进度信息框窗口
一.起因说明 之前有些项目是用Access完成的,当时为了给用户显示一些进度信息,自制了一个进度信息窗体,类似下图所示: 随着项目不断变迁,需要将进度信息按阶段及子进度进行显示,并且出于代码封装的需求 ...
- llinux svn安装
1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) [plain] view plain copy print? sudo apt-get ...
- 【Android】error opening trace file: No such file or directory (2)
1.问题描述: 运行报错: 12-25 13:35:32.286: E/Trace(1202): error opening trace file: No such file or directory ...
- JavaWeb总结(六)—Session
一.Session的介绍 在Web开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务器 ...
- 一个只有99行代码的JS流程框架
张镇圳,腾讯Web前端高级工程师,对内部系统前端建设有多年经验,喜欢钻研捣鼓各种前端组件和框架. 最近一直在想一个问题,如何能让js代码写起来更语义化和更具有可读性. 上周末的时候突发奇想,当代码在运 ...