redis的有序集合ZSET(stored set)
相关命令
1.ZADD
ZADD key-name score member [score member……]
将带有给定分值的成员添加到有序集合里

2.ZREM
ZREM key-name member [ member……]
从有序集合中删除指定的成员

php示例
$redis = new redis();
$redis->connect('127.0.0.1', 6609);
$redis->delete('sc1');
$redis->delete('sc2');
$redis -> zAdd('sc1',1,'k1',2,'k2',3,'k3',4,'k4',5,'k5');
$redis -> zAdd('sc1',6,'k6');
$redis -> zAdd('sc1',7,'k7');
var_dump($redis->zRange('sc1', 0, -1));
echo "<br/>";
//结果 array(7) { [0]=> string(2) "k1" [1]=> string(2) "k2" [2]=> string(2) "k3" [3]=> string(2) "k4" [4]=> string(2) "k5" [5]=> string(2) "k6" [6]=> string(2) "k7" }
//rem
var_dump($redis -> zRem('sc1','k2','k3'));
echo "<br/>";
//结果 int(2)
var_dump($redis -> zDelete('sc1','k4','k6'));
//结果 int(2)
echo "<br/>";
var_dump($redis->zRange('sc1', 0, -1));
//结果array(3) { [0]=> string(2) "k1" [1]=> string(2) "k5" [2]=> string(2) "k7" }
zrange参数withscores: bool = false,当为true时
$redis = new redis();
$redis->connect('127.0.0.1', 6609);
$redis->delete('sc1');
$redis->delete('sc2');
$redis -> zAdd('sc1',1,'k1',2,'k2',3,'k3',4,'k4',5,'k5');
$redis -> zAdd('sc1',6,'k6');
$redis -> zAdd('sc1',7,'k7');
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
//rem
var_dump($redis -> zRem('sc1','k2','k3'));
echo "<br/>";
//结果 int(2)
var_dump($redis -> zDelete('sc1','k4','k6'));
//结果 int(2)
echo "<br/>";
var_dump($redis->zRange('sc1', 0, -1,true));
//结果array(3) { ["k1"]=> float(1) ["k5"]=> float(5) ["k7"]=> float(7) }
3.ZCARD
ZCARD key-name
返回存储在key对应的有序集合中的元素的个数

php示例
$redis->delete('sc1');
$redis -> zAdd('sc1',1,'k1',2,'k2',3,'k3',8,'k8');
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(4) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k8"]=> float(8) }
var_dump($redis->zSize('sc1'));
echo "<br/>";
//结果 int(4)
var_dump($redis->zCard('sc1'));
echo "<br/>";
//结果 int(4)
4.ZCOUNT
ZCOUNT key-name min max
返回key对应的有序集合中介于min和max间的元素的个数

php示例
var_dump($redis->zRange('sc1', 0, -1));
echo "<br/>";
//结果 array(7) { [0]=> string(2) "k1" [1]=> string(2) "k2" [2]=> string(2) "k3" [3]=> string(2) "k4" [4]=> string(2) "k5" [5]=> string(2) "k6" [6]=> string(2) "k7" }
var_dump($redis->zCount('sc1',2,5));
//结果int(4)
5.ZSCORE
ZSCORE key-name member
返回key对应的有序集合中member的score值。如果member在有序集合中不存在,那么将会返回nil

php示例
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zScore('sc1','k5'));
//结果float(5)
6.ZINCRBY
ZINCRBY key-name increment member
将key对应的有序集合中member元素的scroe加上increment。
如果指定的member不存在,那么将会添加该元素,并且其score的初始值为increment。
如果key不存在,那么将会创建一个新的有序列表,其中包含member这一唯一的元素。
如果key对应的值不是有序列表,那么将会发生错误

php示例
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zIncrBy('sc1',8,'k5'));
//结果float(13)
7.ZRANGE
ZRANGE key-name start stop [WITHSCORES]
取得特定范围内的排序元素,0代表第一个元素,1代表第二个以此类推。-1代表最后一个,-2代表倒数第二个
WITHSCORES ,将成员的分值也一并返回
元素按照score从低到高的顺序排列

8.ZREVRANGE
ZREVRANGE key-name start stop [WITHSCORES]
返回key对应的有序集合中指定区间的所有元素。
这些元素按照score从高到低的顺序进行排列。
对于具有相同的score的元素而言,将会按照递减的字典顺序进行排列

php示例
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zRevRange('sc1',0,-1,true));
//结果array(7) { ["k7"]=> float(7) ["k6"]=> float(6) ["k5"]=> float(5) ["k4"]=> float(4) ["k3"]=> float(3) ["k2"]=> float(2) ["k1"]=> float(1) }
9.ZRANGEBYSCORE
ZRANGEBYSCORE key-name min max [WITHSCORES]
返回key对应的有序集合中score介于min和max之间的所有元素(包哈score等于min或者max的元素)。
元素按照score从低到高的顺序排列

php示例
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zRangeByScore('sc1', 0, 3));
echo "<br/>";
//结果array(3) { [0]=> string(2) "k1" [1]=> string(2) "k2" [2]=> string(2) "k3" }
var_dump($redis->zRangeByScore('sc1', 0, 3,array('withscores' => TRUE)));
echo "<br/>";
//结果array(3) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) }
var_dump($redis->zRangeByScore('sc1', 0, 3,array('limit' => array(1, 1))));
echo "<br/>";
//结果array(1) { [0]=> string(2) "k2" }
var_dump($redis->zRangeByScore('sc1', 0, 3,array('withscores' => TRUE, 'limit' => array(1, 1))));
echo "<br/>";
//结果array(1) { ["k2"]=> float(2) }
10.ZREVRANGEBYSCORE
ZREVRANGEBYSCORE key-name max min [WITHSCORES]
返回key对应的有序集合中score介于min和max之间的所有元素(包哈score等于min或者max的元素)。
元素按照score从高到低的顺序排列

php示例
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zRevRangeByScore('sc1', 5, 3));
echo "<br/>";
//结果array(3) { [0]=> string(2) "k5" [1]=> string(2) "k4" [2]=> string(2) "k3" }
var_dump($redis->zRevRangeByScore('sc1', 5, 3,array('withscores' => TRUE)));
echo "<br/>";
//结果array(3) array(3) { ["k5"]=> float(5) ["k4"]=> float(4) ["k3"]=> float(3) }
var_dump($redis->zRevRangeByScore('sc1', 5, 3,array('limit' => array(1, 1))));
echo "<br/>";
//结果array(1) { [0]=> string(2) "k4" }
var_dump($redis->zRevRangeByScore('sc1', 5, 3,array('withscores' => TRUE, 'limit' => array(1, 1))));
echo "<br/>";
//结果array(1) { ["k4"]=> float(4) }
11.ZRANK
ZRANK key-name member
返回成员member在有序集合的排名
成员按分值从小到大排列
rank值(或index)是从0开始的

12.ZREVRANK
ZREVRANK key-name member
返回成员member在有序集合的排名
成员按分值从大到小排列

php示例
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zRank('sc1', 'k2'));
echo "<br/>";
//结果int(1)
var_dump($redis->zRevRank('sc1','k2'));
echo "<br/>";
//结果 int(5)
13.ZREMRANGEBYRANK
ZREMRANGEBYRANK key-name start stop
移除有序集合中排名介于start和stop之间的所有成员

var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zRemRangeByRank('sc1', 0, 3));
echo "<br/>";
//结果int(4)
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(3) { ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
14.ZREMRANGEBYSCORE
ZREMRANGEBYSCORE key-name min max
移除有序集合中分值介于min 和max 之间的所有成员

php示例
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(7) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
var_dump($redis->zRemRangeByScore('sc1', 0, 3));
echo "<br/>";
//结果int(3)
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(4) { ["k4"]=> float(4) ["k5"]=> float(5) ["k6"]=> float(6) ["k7"]=> float(7) }
15.ZINTERSTORE
ZINTERSTORE dest-key key-count key [key……] [WEIGHTS weight[weight……]] [AGGREGATE SUM|MIN|MAX]
对给定的有序集合执行交集运算
有序集合的数量通过key-count指定
WEIGHTS选项,用于指定一个乘法因子,有序集合中每个成员的SCORE值乘以该因子后,结果传递给聚合函数。并且,乘法因子的设置需要根据有序集合的个数分别指定。默认为1。
AGGREGATE选项,用于指定该交集的结果集的聚合方式。默认使用的是SUM


多添加几个元素


min

带weights的

php示例
$redis = new redis();
$redis->connect('127.0.0.1', 6609);
$redis->delete('sc1');
$redis->delete('sc2');
$redis->delete('in');
$redis->delete('in1');
$redis->delete('in2');
$redis -> zAdd('sc1',1,'k1',2,'k2',3,'k3');
$redis -> zAdd('sc2',1,'k1',2,'k2',3,'k3',4,'k4',5,'k5');
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(3) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) }
var_dump($redis->zRange('sc2', 0, -1,true));
echo "<br/>";
//结果 array(5) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) }
var_dump($redis->zInter('in', array('sc1', 'sc2')));
echo "<br/>";
//结果int(3)
var_dump($redis->zRange('in', 0, -1,true));
echo "<br/>";
//结果 array(3) { ["k1"]=> float(2) ["k2"]=> float(4) ["k3"]=> float(6) }
var_dump($redis->zInter('in1', array('sc1', 'sc2'), array(1, 3), 'min'));
echo "<br/>";
//结果 int(3)
var_dump($redis->zRange('in1', 0, -1,true));
echo "<br/>";
//结果 array(3) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) }
var_dump($redis->zInter('in2', array('sc1', 'sc2'), array(1, 3), 'max'));
echo "<br/>";
//结果 int(3)
var_dump($redis->zRange('in2', 0, -1,true));
echo "<br/>";
//结果 array(3) { ["k1"]=> float(3) ["k2"]=> float(6) ["k3"]=> float(9) }
16.ZUNIONSTORE
ZUNIONSTORE dest-key key-count key [key……] [WEIGHTS weight[weight……]] [AGGREGATE SUM|MIN|MAX]
对给定的有序集合执行并集运算
有序集合的数量通过key-count指定
WEIGHTS选项,用于指定一个乘法因子,有序集合中每个成员的SCORE值乘以该因子后,结果传递给聚合函数。并且,乘法因子的设置需要根据有序集合的个数分别指定。默认为1。
AGGREGATE选项,用于指定该交集的结果集的聚合方式。默认使用的是SUM。

php示例
$redis = new redis();
$redis->connect('127.0.0.1', 6609);
$redis->delete('sc1');
$redis->delete('sc2');
$redis->delete('un');
$redis->delete('un1');
$redis->delete('un2');
$redis -> zAdd('sc1',1,'k1',2,'k2',3,'k3',8,'k8');
$redis -> zAdd('sc2',1,'k1',2,'k2',3,'k3',4,'k4',5,'k5');
var_dump($redis->zRange('sc1', 0, -1,true));
echo "<br/>";
//结果 array(4) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k8"]=> float(8) }
var_dump($redis->zRange('sc2', 0, -1,true));
echo "<br/>";
//结果 array(5) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k4"]=> float(4) ["k5"]=> float(5) }
var_dump($redis->zUnion('un', array('sc1', 'sc2')));
echo "<br/>";
//结果int(6)
var_dump($redis->zRange('un', 0, -1,true));
echo "<br/>";
//结果 array(6) { ["k1"]=> float(2) ["k2"]=> float(4) ["k4"]=> float(4) ["k5"]=> float(5) ["k3"]=> float(6) ["k8"]=> float(8) }
var_dump($redis->zUnion('un1', array('sc1', 'sc2'), array(1, 3), 'min'));
echo "<br/>";
//结果 int(6)
var_dump($redis->zRange('un1', 0, -1,true));
echo "<br/>";
//结果 array(6) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k8"]=> float(8) ["k4"]=> float(12) ["k5"]=> float(15) }
var_dump($redis->zUnion('un2', array('sc1', 'sc2'), array(1, 3), 'max'));
echo "<br/>";
//结果 int(6)
var_dump($redis->zRange('un2', 0, -1,true));
echo "<br/>";
//结果 array(6) { ["k1"]=> float(3) ["k2"]=> float(6) ["k8"]=> float(8) ["k3"]=> float(9) ["k4"]=> float(12) ["k5"]=> float(15) }
17.ZSCAN
用于迭代有序集合中的元素,包括元素成员与元素分值
ZSCAN key-name CURSOR [MATCH pattern] [COUNT count]


redis的有序集合ZSET(stored set)的更多相关文章
- php使用redis的有序集合zset实现延迟队列
延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...
- 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)
redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...
- Redis对象——有序集合(ZSet)
有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序 ...
- redis 有序集合(zset)函数
redis 有序集合(zset)函数 zAdd 命令/方法/函数 Adds the specified member with a given score to the sorted set stor ...
- 9、Redis五大数据类型---有序集合Zset(sorted set)
一.简介 zset与set异同 相同之处: 都是没有重复元素的字符串集合 不同之处: 有序集合zset的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排 ...
- [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:php-redis中有序集合 zset的使用
ZSET(stored set) 和 set 一样是字符串的集合,不同的是每个元素都会关联一个 double 类型的 score .实现使用的是 skip list 和 hash table , sk ...
随机推荐
- 【转】如何使用visual studio将你的程序打包成安装包
原文地址:https://www.cnblogs.com/SolarWings/p/6132310.html 很久很久以前,我一直有一个梦想,那就是做出一个自己的游戏,这个游戏很像模像样,除了拥有一个 ...
- Windows-DB2 9.7安装图解
解压后,双击 setup.exe 安装 打开后,选择"安装产品" 在安装产品中,选择"安装新产品" 点击下一步 同意软件许可协议,点击下一步 可以根据需要,选择 ...
- 快速排序,一个爱情故事-java版
public static void myquicksort(int[] ages,int girl,int boy){ //这是一个站在数组两端,追求完美爱情的故事 //年龄不匹配的不要 //第0步 ...
- 【Visual Studio】项目的引用显示黄色叹号
情况一:个别引用的DLL显示黄色叹号. 通常是因为该DLL需要的.Net Framework版本与当前项目使用的版本不兼容.如该DLL需要的版本高于当前项目使用的版本.考虑修改项目的.Net Fram ...
- azkaban安装
1.下载:git clone https://github.com/azkaban/azkaban.git 2.编译:./gradlew build -x test 3. 创建目录并拷贝 mkdir ...
- JavaScript:数据类型
JavaScript中数据类型分为两种: 1.基本数据类型 string number boolean null undefined 2.引用类型 数组.Object.function 一.基本数据类 ...
- GCC编译错误小结
gcc编译时对’xxxx’未定义的引用问题可能错误 错误一: 没有实现xxxx 错误二: c++引用c语言so库,但是so库头文件没有extern "C" 错误三: 检查各个共享库 ...
- 巧用style的另类写法
看到style,不少人可能会说这个我知道,就是控件写属性的话可以通过style来实现代码的复用,单独把这些属性及其参数写成style就可以便捷的调用. <?xml version="1 ...
- 关于Unity中常用的数据结构和JSON处理(专题三)
数据结构通俗来讲就是用某个对象去存储数据集合,比如要存储100个整数,要用什么样的数据类型能把它们存储好. Jason处理,服务器对接,配置文件的使用,Unity和Jason之间相互的转换. Arra ...
- C++自定义异常类
代码样例: #include <iostream> using namespace std; class illegalParameterValue { public: illegalPa ...