有序集合与集合一样,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. springmvc的Interceptor拦截器和servlet的filter过滤器

    springmvc的Interceptor拦截器和servlet的filter过滤器 1.springmvc的Interceptor拦截器和servlet的filter过滤器springboot实现方 ...

  2. uniapp 小程序自定义组件样式穿透问题

    1.正在开发时发现自定义组件间样式发生穿透问题 2.主需要引入下面代码可解决 export default { options: { //默认值 isolated(启动隔离) //apply-shar ...

  3. [vsCode]Visual Studio Code环境变量不同步

    很奇怪的事情,在设置好Path环境变量后,powershell正常了, 但是vscode不正常 解决方法竟然是: 确认{在PowerShell运行正常}后,关闭{vsCode},进入{管理员模式的Po ...

  4. python读取xml格式数据

    读取节点文本值和,属性值 # -*- coding: UTF-8 -*- from xml.dom import minidom dom=minidom.parse('F:\\python_proje ...

  5. #0延时与for循环+fork join_none

    参考资料 (1) https://blog.csdn.net/moon9999/article/details/104207565 1.for循环+fork...join_none 注1: for循环 ...

  6. easyui datagrid 表头与数据错位

    方法一:容易,实用的方法 在jquery.easyui.min.js中查找到field.replace(/[\.|\s]/g, "-")在其后添加replace 例子:field. ...

  7. [Oracle19C ASM管理] ASM的存储管理

    安装过程中,选择的OMF自动管理文件.可以看到存储放在ASM的根下. SQL> show parameter db_create_file_dest; NAME TYPE VALUE db_cr ...

  8. 使用myBadboy(python自主开发工具)启动谷歌浏览器并自动录制jmeter脚本

    一.源代码下载 https://gitee.com/rmtic/mybadboy 说明:因现有的录制方法有不能定制等不足之处,所以自力更生,自动生成对应jmeter脚本,减少维护成本 二.操作说明 1 ...

  9. equals的用法的注意事项

    String a="equals的用法"; String b=a.equals("equals的用法")?"相等":"不相等&qu ...

  10. 取消Andorid设备的严格模式

    在做文件拍照选择等应用时,发现7.0以上手机需要主动关闭严格模式才能让代码不报错 通过关闭严格模式绕过fileprovider 权限的控制的方法,绕过FileProvider在应用间共享文件的限制 7 ...