有序集合与集合一样,string类型元素的集合,不允许重复的成员。

有序集合,每个元素都会关联一个 double 类型的分数。Redis 通过分数为集合的成员进行从小到大的排序

有序集合的成员是唯一的,但分数 (score) 可以重复。

集合是通过哈希表实现的, 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

添加元素(zAdd)

// zAdd(key,increment,value)
$redis->zAdd('score', 550, '语文');
$redis->zAdd('score', 66, '高数');
$redis->zAdd('score', 77, '公共英语');
$redis->zAdd('score', 88, '计算机组成原理',99,'Java程序设计');

元素分值增减(zIncrBy)

// zIncrBy(key,increment,value);increment值可为正/负值
$redis->zIncrBy('score', -10, '语文');
$redis->zAdd('score', 10, '高数');  

获取排行(zRevRange)

// 根据排序后的数据,升序和降序的列表获取
$redis->zRevRange('score', 0, 2);

获取指集合中成员排名(zRank,zRevRank)

// 返回有序集合中指定成员的排名。按分数值递减排序。分数值最大者排名为0。
$redis->zRevRank('score','语文');
// 返回有序集合中指定成员的排名,按分数值递增排序。分数值最小者排名为0。
$redis->zRank('score', 历史);

获取指定索引区间内的成员(Zrange,zReverseRange)

// Zrange('set_key', start, end,[true]) 。 true:是否返回各个元素的分数值,默认为false
// 成员按分数值递增排序。具有相同分数值的成员按字典序倒序排列。
// start 和 stop 以 0 表示有序集第一个成员,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
$redis->Zrange('score',0,-1,true);
// zReverseRange('set_key', start, end,[true]) 成员按分数值递减排序,分数值相同的则按字典序的倒序排序
$redis->zReverseRange('score',0,-1,true);

获取指定分值区间的元素(zRangeByScore,zRevRangeByScore)

// zRangeByScore(key,min,max,[withscores]|[LIMIT offset count])
$redis->zRangeByScore('score',60,90,['withscores' => true]);
// zRevRangeByScore(key,max,min,[withscores]|[LIMIT offset count])
$redis->zRevRangeByScore('score',90,60,['withscores' => true]);
注:
  ['WITHSCORES' => true] 显示整个有序集合成员的 score 值
  ['LIMIT' =>[0,2]] 自定义返回的有序集合起始位置及条数

获取元素个数(zCard)

$redis->zCard('score');

获取指定分值区间内的元素个数(zCount)

$redis->zCount('score', 60, 90);

获取指定元素的 数据 (zScore)

$redis->zScore('score','历史')

计算有序集合中指定区间内成员数量(Zlexcount)

// Zlexcount('key_name','[value1','[value2')
$redis->Zlexcount('score','[英语','[语文');

计算给定的有序集的交集数量(Zinterstore)

// 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该结果集储存到指定集合
// 默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和
// Zinterstore('zset_Key',['keys'|'keyt'])
$resdis->Zinterstore('score',['score1']);

计算给定的一个或多个有序集的并集/交集(Zunionstore/zinterstore)

//计算给定一个或多个有序集的交集,元素相加,并将其存储到目的有序集中
$redis->zinterstore('new_zset_key',['score','score1']);
//计算给定一个或多个有序集的并集,元素相加,并将其存储到目的有序集中
$redis->zunionstore('new_zset_key',['score', 'score1']);

删除元素(zRem)

// 删除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数
$redis->zRem('score', '历史','盈余');

根据排名删除(zRemRangeByRank)

// 自 0 开始
$redis->zRemRangeByRank('score', 0, 2);

根据指定分值区间删除(zRemRangeByScore)

//删除score在[60, 90]之间的元素
$redis->zRemRangeByScore('score', 60, 90);

迭代有序集合中的元素(zScan)

//可理解为查找指定的值,将元素修改为float类型
$redis->zScan('score', $it, 100, 10);
// 返回值:[元素名=>分数值,,..]
// 返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。

PHP Redis - zSet(有序集合)的更多相关文章

  1. Redis ZSet 有序集合

    有序集合类型与集合类型的区别就是他是有序的.有序集合是在集合的基础上为每一个元素关联一个分数,这就让有序集合不仅支持插入,删除,判断元素是否存在等操作外,还支持获取分数最高/最低的前N个元素.有序集合 ...

  2. php使用redis的有序集合zset实现延迟队列

    延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...

  3. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)

    redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...

  4. [PHP] PHP多个进程配合redis的有序集合实现大文件去重

    1.对一个大文件比如我的文件为 -rw-r--r--  1 ubuntu ubuntu  9.1G Mar  1 17:53 2018-12-awk-uniq.txt 2.使用split命令切割成10 ...

  5. Redis 操作有序集合数据

    Redis 操作有序集合数据: > zadd names "Tom" // zadd 用于往有序集合中添加元素,其中 1 在 Redis 中称为 score(分数),用来进行 ...

  6. python 操作redis之——有序集合(sorted set) (七)

    #coding:utf8 import redis r =redis.Redis(host=") 1.Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中.如果某个成员已经是有序 ...

  7. Redis对象——有序集合(ZSet)

    有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序 ...

  8. redis的有序集合ZSET(stored set)

    相关命令 1.ZADD ZADD key-name score member [score member……] 将带有给定分值的成员添加到有序集合里 2.ZREM ZREM  key-name mem ...

  9. redis学习-有序集合(zset)常用命令

    zadd:有序集合增加一个或者多个键值对 与set集合不同,zset添加的时候需要 指定 score,这个是用来排名的 zrange:返回指定范围的键 zcount:返回集合指定范围的个数(以每个键值 ...

  10. redis之有序集合类型(Zset)——排行榜的实现

    当数据库对排序支持的不是很好,可以利用redis有序集合排序 原文链接:http://blog.csdn.net/loophome/article/details/50373202

随机推荐

  1. BundleFusion_Ubuntu_Pangolin 安装的一些error

    /usr/bin/ld: 找不到 -lEigen3::Eigen 解决方法:find_package(Eigen3 REQUIRED)为list(APPEND CMAKE_INCLUDE_PATH & ...

  2. java异常信息打印

    如果你不仅想在日志中查看异常信息,也想把异常信息保存起来作为数据查看,那么你可以这样做 public void printException(Exception e) { ByteArrayOutpu ...

  3. Eclipse 获取maven项目出现问题汇总

    1.errors occurred during the build,可以试试加上下图的配置,路径根据自己jak安装路径去修改

  4. Jmeter 命令执行脚本并输出报告

    Jmeter 可以通过cmd 命令执行脚本,并输出报告 执行顺序如下: 第一 进入 安装的jmeter bin 目录下:(我安装的是E盘)

  5. ES得分

    一.概念 1.ES主要用于搜索 2.搜索要把更有相关性的结果展示出来 3.对一个文档评分,相关性越大,评分越高 4.打分的本质是排序 二.评分规则 1.ES5之前,默认评分规则是TF-IDF,这是信息 ...

  6. vue高级进阶( 二 ) 8种组件通信详解

      vue高级进阶( 二 ) 8种组件通信详解 猛兽总是独行,牛羊才成群结队. -------鲁迅 vue组件通信的重要性无需多言...但是你肯定没有全部掌握,所以这第二篇文章应运而生 props和$ ...

  7. COM 对象的利用与挖掘4

    作者:Joey@天玄安全实验室 前言 本文在FireEye的研究Hunting COM Objects[1]的基础上,讲述COM对象在IE漏洞.shellcode和Office宏中的利用方式以及如何挖 ...

  8. python setup.py install 安装、删除。

    # python install 安装.卸载 python setup.py install --record files.txt cat files.txt | xargs rm -rf

  9. 使用supervisor 管理 laravel 框架中的进程

    前言:在laravel中,经常要在项目根目录下执行 php artisan queue:work  来执行队列中的任务,由此,我们想到用supervisor来管理这个进程 Supervisor是用Py ...

  10. 08 安装虚拟机:Windows 10

    08 安装虚拟机:Windows 10 在安装虚拟机之前,总是要有安装来源媒体(例如:ISO映像之类),方可顺利进行.在Proxmox VE中有几种将ISO档置入Proxmox VE的方式,本节介绍其 ...