文档章节

Redis SortedSet

learn_more
 learn_more
发布于 2016/09/29 14:06
字数 1545
阅读 32
收藏 0

SortedSet 有序集合

一个Set集合,但是内部通过score进行排序,排序值从 0 开始。

 

1、添加

>zadd key score member [[score member] [score member] ...]

将一个或多个 member 元素及其 score 值加入到有序集 key 当中。如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。

 

2、求总数

>zcard key

返回有序集 key 的总数。

 

>zcount key min max

返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量,注意返回的是数量。

 

>zlexcount key min max

对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中, 成员介于 min 和 max 范围内的元素数量。

 

3、删除

>zrem key member [member ...]

移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。

 

>zremrangebyrank key start end

移除有序集 key 中,指定排名(rank)区间内的所有成员,包含start 和 end

 

>zremrangebyscore key min max

移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。

 

>zremrangebylex key min max

对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中, 成员介于 min 和 max 范围内的所有元素。

 

4、查找

>zrange key start end [WITHSCORES]

返回有序集 key 中,指定排名区间内(包含start 和 end )的成员。其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序(lexicographical order)来排列。

WITHSCORES 选项决定是否返回对应的分数。

 

>zrevrange key start end [WITHSCORES]

和zrange 作用相同,区别是返回的成员是按 score 值递减(从大到小)来排序。

 

>zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

具有相同 score 值的成员按字典序(lexicographical order)来排列。

可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间.

 

>zrevrangebyscore key min max [WITHSCORES] [LIMIT offset count]

和zrangebyscore作用相同,区别是返回的成员是按 score 值递减(从大到小)来排序。

 

>zrangebylex key min max [LIMIT offset count]

当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序(lexicographical ordering)来进行排序, 而这个命令则可以返回给定的有序集合键 key 中, 值介于 min 和 max 之间的成员。如果有序集合里面的成员带有不同的分值, 那么命令返回的结果是未指定的(unspecified)。

 

5、排名与取值

>zrank key member

返回有序集 key 中成员 member 的排名。成员按 score 值递增(从小到大)顺序排列然后再取member的排名,排名从0开始。

 

>zrevrank key member

返回有序集 key 中成员 member 的排名。成员按 score 值递减(从大到小)排列的排名然后再取 member的排名,排名从0开始。

 

>zscore key member

返回有序集 key 中,成员 member 的 score 值。

 

 

6、i++

>zincrby key increment member

为有序集 key 的成员 member 的 score 值加上增量 increment 。

 

>zscan key cursor [MATCH pattern] [COUNT count]

根据游标的位置查找指定数量的元素,因为是批量获取,所以不会在大数据情况下堵塞

 

7、集合运算

>zunionstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

1)计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。

2)默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和 。

3)WEIGHTS

使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

4)AGGREGATE

使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值;使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。

 

>zinterstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.

 

 

注意:

lexicographical ordering (就是字符串的ASCII排序)排序指定范围规则

1)合法的 min 和 max 参数必须包含 ( 或者 [ , 其中 ( 表示开区间(指定的值不会被包含在范围之内), 而 [ 则表示闭区间(指定的值会被包含在范围之内)。

2)特殊值 + 和 - 在 min 参数以及 max 参数中具有特殊的意义, 其中 + 表示正无限, 而 - 表示负无限。 因此, 向一个所有成员的分值都相同的有序集合发送命令 ZRANGEBYLEX <zset> - + , 命令将返回有序集合中的所有元素。

3)示例 zrangebylex set [liu + 查找包含liu和排序在liu之后的所有元素。

 

 

© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
2018/09/24
0
0
java中Redis5大基本类型的用法

redis存储格式 基本用法 Jedis工具类 redis配置文件 String测试 Hash测试 List测试 Set测试 SortedSet 测试 本文转载自【JAVA葵花宝典】 公众号内回复“1”带你进粉丝群...

程序员之家_
2018/09/07
0
0
如何优雅地删除Redis大键

关于Redis大键(Key),我们从[空间复杂性]和访问它的[时间复杂度]两个方面来定义大键。 前者主要表示Redis键的占用内存大小;后者表示Redis集合数据类型(set/hash/list/sorted set)键,所含有...

fzxu_05
2016/08/16
43
0
redis源码分析之有序集SortedSet

有序集SortedSet算是redis中一个很有特色的数据结构,通过这篇文章来总结一下这块知识点。 一、有序集SortedSet命令简介 redis中的有序集,允许用户使用指定值对放进去的元素进行排序,并且基...

凌风郎少
2017/11/19
0
0
nginx proxy_store文件管理实现方案

1。源码下载地址: https://github.com/cxwshawn/ngxproxystorefilemgr 2。介绍: 1)、nginx-conf目录:主要实现基于nginx.conf中操作redis数据库代码,基于lua实现;大致流程: 获取cache锁...

shawn chen
2014/12/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Leetcode PHP题解--D106 997. Find the Town Judge

D106 997. Find the Town Judge 题目链接 997. Find the Town Judge 题目分析 给定一个数组N代表人数,和给定一个数组,每个元素为一个只有两个值(a,b)的数组。 代表a信任b。 从中找到一个b...

skys215
14分钟前
0
0
日志相关---log4j2配置文件详解

一、关于配置文件的名称以及在项目中的存放位置 log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn". 系统选择配置文件的...

spinachgit
15分钟前
0
0
redis 消息队列实现

方式一:通过list的阻塞读取命令,blpop或者brpop 消费者 public class Consumer extends DemoApplicationTests{ @Test public void consume(){ int timeout = 0;//永不超......

小海bug
37分钟前
2
0
如何把微信语音汇总成一个MP3文件?

本篇以苹果手机为例,安卓手机也可类似。 第一步,安装同步助手 同步助手是一款在电脑上安装,可以保存手机上的内容的软件。支持把微信的聊天历史内容导出。甚至支持筛选语音文件按顺序导出—...

吴伟祥
42分钟前
4
0
用ffsend使用Firefox Send

导读 ffsend 是 Firefox Send 的命令行客户端。本文将展示 Firefox Send 和 ffsend 如何工作。还会详细介绍如何在 Fedora 中安装和使用它。 ffsend 是 Firefox Send 的命令行客户端。本文将展...

问题终结者
43分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部