有序集合与集合一样,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. uniapp打包小程序运行到微信开发工具

    1.在manifest.json文件中配置AppID 2.在HBuilderX中配置微信开发者工具的安装路径. 工具->设置->运行设置 3.  在微信开发者工具中配置 设置->安全 ...

  2. 在 Windows 上使用VirtualBox 安装 Ubuntu

    一.VirtualBox虚拟机软件 之前使用过VMWare,这是第一次尝试使用VirtualBox,记录一下~ 我们可以从官网下载VirtualBox,地址:https://www.virtualbo ...

  3. 5_Java对象

    面向对象编程 对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统.但是,具体到微观操作,仍然需要面向过程的思路去处理. 面向对象编程(Object-Ori ...

  4. xss-labs

    level1 <h1 align=center>欢迎来到level1</h1> <h2 align=center>欢迎用户te111</h2><c ...

  5. Delphi 从字符串中提取数字

    function GetNumberFromStr(strIn: string; sFlag: string): string; var i: Integer; tempStr: string; be ...

  6. raster2pgsql 执行命令

    raster2pgsql -s 4326 -I -C -M /home/radar_202210251000.tif public.radar_data_xx | psql -h 120.46.210 ...

  7. Jenkins安装和自动化部署

    1.Jenkins安装机器安装要求可以参考官网 https://www.jenkins.io 2.下载jenkins的war包上传到linux上部署 3.安装jdk.git.maven 3.1.安装j ...

  8. ubuntu 16.04升级到18.04 出现apt-get问题解决

    0.背景 编译webrtc安卓版时要升级系统,升级到18.04之后,安装安卓环境时出现以下问题(./build/install-build-deps.sh): libasan2-armhf-cross ...

  9. Vue中v-if和v-for一起使用时的优先级

    问题:Vue2.0中v-if和v-for一起使用时报错,怎么解决呢? 代码和报错信息如下  原因和解决办法:   在处于同一节点的时候,v-for 优先级比 v-if 高.这意味着 v-if 将分别重 ...

  10. CCCC L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事 【树状数组】

    https://pintia.cn/problem-sets/994805046380707840/exam/problems/1518582895035215872 题意 给你一棵树,给定树根,要求 ...