PHP Redis - zSet(有序集合)
有序集合与集合一样,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(有序集合)的更多相关文章
- Redis ZSet 有序集合
有序集合类型与集合类型的区别就是他是有序的.有序集合是在集合的基础上为每一个元素关联一个分数,这就让有序集合不仅支持插入,删除,判断元素是否存在等操作外,还支持获取分数最高/最低的前N个元素.有序集合 ...
- php使用redis的有序集合zset实现延迟队列
延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...
- 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)
redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...
- [PHP] PHP多个进程配合redis的有序集合实现大文件去重
1.对一个大文件比如我的文件为 -rw-r--r-- 1 ubuntu ubuntu 9.1G Mar 1 17:53 2018-12-awk-uniq.txt 2.使用split命令切割成10 ...
- Redis 操作有序集合数据
Redis 操作有序集合数据: > zadd names "Tom" // zadd 用于往有序集合中添加元素,其中 1 在 Redis 中称为 score(分数),用来进行 ...
- python 操作redis之——有序集合(sorted set) (七)
#coding:utf8 import redis r =redis.Redis(host=") 1.Zadd 命令用于将一个或多个成员元素及其分数值加入到有序集当中.如果某个成员已经是有序 ...
- Redis对象——有序集合(ZSet)
有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序 ...
- redis的有序集合ZSET(stored set)
相关命令 1.ZADD ZADD key-name score member [score member……] 将带有给定分值的成员添加到有序集合里 2.ZREM ZREM key-name mem ...
- redis学习-有序集合(zset)常用命令
zadd:有序集合增加一个或者多个键值对 与set集合不同,zset添加的时候需要 指定 score,这个是用来排名的 zrange:返回指定范围的键 zcount:返回集合指定范围的个数(以每个键值 ...
- redis之有序集合类型(Zset)——排行榜的实现
当数据库对排序支持的不是很好,可以利用redis有序集合排序 原文链接:http://blog.csdn.net/loophome/article/details/50373202
随机推荐
- uniapp打包小程序运行到微信开发工具
1.在manifest.json文件中配置AppID 2.在HBuilderX中配置微信开发者工具的安装路径. 工具->设置->运行设置 3. 在微信开发者工具中配置 设置->安全 ...
- 在 Windows 上使用VirtualBox 安装 Ubuntu
一.VirtualBox虚拟机软件 之前使用过VMWare,这是第一次尝试使用VirtualBox,记录一下~ 我们可以从官网下载VirtualBox,地址:https://www.virtualbo ...
- 5_Java对象
面向对象编程 对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统.但是,具体到微观操作,仍然需要面向过程的思路去处理. 面向对象编程(Object-Ori ...
- xss-labs
level1 <h1 align=center>欢迎来到level1</h1> <h2 align=center>欢迎用户te111</h2><c ...
- Delphi 从字符串中提取数字
function GetNumberFromStr(strIn: string; sFlag: string): string; var i: Integer; tempStr: string; be ...
- raster2pgsql 执行命令
raster2pgsql -s 4326 -I -C -M /home/radar_202210251000.tif public.radar_data_xx | psql -h 120.46.210 ...
- Jenkins安装和自动化部署
1.Jenkins安装机器安装要求可以参考官网 https://www.jenkins.io 2.下载jenkins的war包上传到linux上部署 3.安装jdk.git.maven 3.1.安装j ...
- ubuntu 16.04升级到18.04 出现apt-get问题解决
0.背景 编译webrtc安卓版时要升级系统,升级到18.04之后,安装安卓环境时出现以下问题(./build/install-build-deps.sh): libasan2-armhf-cross ...
- Vue中v-if和v-for一起使用时的优先级
问题:Vue2.0中v-if和v-for一起使用时报错,怎么解决呢? 代码和报错信息如下 原因和解决办法: 在处于同一节点的时候,v-for 优先级比 v-if 高.这意味着 v-if 将分别重 ...
- CCCC L3-032 关于深度优先搜索和逆序对的题应该不会很难吧这件事 【树状数组】
https://pintia.cn/problem-sets/994805046380707840/exam/problems/1518582895035215872 题意 给你一棵树,给定树根,要求 ...