• 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]

    
    
  • 相关阅读:
    c# 操作数据库
    dataview findrows
    C++:gethostname,gethostbyname获取IP地址和计算机名
    MQTT
    STM32操作外部SRAM
    JAVA中最常用的快捷键总结
    Zstack中End Device设备失去父节点时的重新入网处理方法(转)
    VC++ 重叠窗口
    (转载)PLC内部电路常见的几种形式
    VS2005 DoModal函数
  • 原文地址:https://www.cnblogs.com/baby123/p/7155748.html
Copyright © 2020-2023  润新知