博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis的有序集合ZSET(stored set)
阅读量:7237 次
发布时间:2019-06-29

本文共 10320 字,大约阅读时间需要 34 分钟。

相关命令

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 "
";//结果 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 "
";//结果 int(2)var_dump($redis -> zDelete('sc1','k4','k6'));//结果 int(2)echo "
";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 "
";//结果 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 "
";//结果 int(2)var_dump($redis -> zDelete('sc1','k4','k6'));//结果 int(2)echo "
";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 "
";//结果 array(4) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k8"]=> float(8) } var_dump($redis->zSize('sc1'));echo "
";//结果 int(4) var_dump($redis->zCard('sc1'));echo "
";//结果 int(4)

 

4.ZCOUNT

  ZCOUNT key-name min max

返回key对应的有序集合中介于min和max间的元素的个数

 php示例

var_dump($redis->zRange('sc1', 0, -1)); echo "
";//结果 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 "
";//结果 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 "
";//结果 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 "
";//结果 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 "
";//结果 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 "
";//结果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 "
";//结果array(3) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) } var_dump($redis->zRangeByScore('sc1', 0, 3,array('limit' => array(1, 1)))); echo "
";//结果array(1) { [0]=> string(2) "k2" } var_dump($redis->zRangeByScore('sc1', 0, 3,array('withscores' => TRUE, 'limit' => array(1, 1)))); echo "
";//结果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 "
";//结果 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 "
";//结果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 "
";//结果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 "
";//结果array(1) { [0]=> string(2) "k4" } var_dump($redis->zRevRangeByScore('sc1', 5, 3,array('withscores' => TRUE, 'limit' => array(1, 1)))); echo "
";//结果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 "
";//结果 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 "
";//结果int(1) var_dump($redis->zRevRank('sc1','k2')); echo "
";//结果 int(5)

 

13.ZREMRANGEBYRANK

  ZREMRANGEBYRANK key-name start stop

移除有序集合中排名介于start和stop之间的所有成员

 

 

var_dump($redis->zRange('sc1', 0, -1,true)); echo "
";//结果 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 "
";//结果int(4) var_dump($redis->zRange('sc1', 0, -1,true)); echo "
";//结果 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 "
";//结果 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 "
";//结果int(3) var_dump($redis->zRange('sc1', 0, -1,true)); echo "
";//结果 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 "
";//结果 array(3) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) } var_dump($redis->zRange('sc2', 0, -1,true)); echo "
";//结果 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 "
";//结果int(3) var_dump($redis->zRange('in', 0, -1,true)); echo "
";//结果 array(3) { ["k1"]=> float(2) ["k2"]=> float(4) ["k3"]=> float(6) } var_dump($redis->zInter('in1', array('sc1', 'sc2'), array(1, 3), 'min')); echo "
";//结果 int(3) var_dump($redis->zRange('in1', 0, -1,true)); echo "
";//结果 array(3) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) } var_dump($redis->zInter('in2', array('sc1', 'sc2'), array(1, 3), 'max')); echo "
"; //结果 int(3) var_dump($redis->zRange('in2', 0, -1,true)); echo "
";//结果 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 "
";//结果 array(4) { ["k1"]=> float(1) ["k2"]=> float(2) ["k3"]=> float(3) ["k8"]=> float(8) } var_dump($redis->zRange('sc2', 0, -1,true)); echo "
";//结果 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 "
";//结果int(6) var_dump($redis->zRange('un', 0, -1,true)); echo "
";//结果 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 "
";//结果 int(6) var_dump($redis->zRange('un1', 0, -1,true)); echo "
";//结果 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 "
"; //结果 int(6) var_dump($redis->zRange('un2', 0, -1,true)); echo "
";//结果 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]

 

 

转载地址:http://wgofm.baihongyu.com/

你可能感兴趣的文章
【实战】微服务实施整体方略
查看>>
linux vsftpd 配置 常用
查看>>
文远知行“筑梦号”自动驾驶汽车在安庆正式公开试乘 ...
查看>>
一次非常有趣的 SQL 优化经历
查看>>
2019年最全最系统的大数据学习路线
查看>>
【云周刊】第206期:2018年阿里云云攻略十二篇精选好文 ...
查看>>
面对“烟囱式”难题,联想企业网盘展现跨时空延展能力
查看>>
函数第一部分:经典的永远是简单的-Python基础前传(10)
查看>>
一个该死的Linux权限问题
查看>>
Oracle 中关于 Between and 日期边界问题
查看>>
7.5-7.8一周学习笔记
查看>>
小米首款三折叠屏手机曝光,折叠屏会是2019年热潮吗?
查看>>
云服务器能干什么
查看>>
PCIe-8604 USB3.0图像采集卡无需额外供电机器视觉智能相机网卡
查看>>
新版 Microsoft Edge 有时会假扮成不同浏览器
查看>>
redis hash底层数据结构
查看>>
H5移动前端开发常用高能css3汇总
查看>>
大规模特征构建实践总结
查看>>
java源码-LinkedList
查看>>
WPF 引用 ttf文件
查看>>