zoukankan      html  css  js  c++  java
  • PHP-Redis扩展使用手册(四)

      1 /* 添加一个或者多个value到无顺序集合总,如果value已经成set中,则返回false
      2      * @param key set名称
      3      * @param value 
      4      * ...
      5      * @return int 新set长度
      6      */
      7     $redis->sAdd('key1' , 'member1'); /* 1, 'key1' => {'member1'} */
      8     $redis->sAdd('key1' , 'member2', 'member3'); /* 2, 'key1' => {'member1', 'member2', 'member3'}*/
      9     $redis->sAdd('key1' , 'member2'); /* 0, 'key1' => {'member1', 'member2', 'member3'}*/
     10     
     11     /* 返回set的value数量;sSize
     12      * @param key set 
     13      * @return int size 
     14      */
     15     $redis->sAdd('key1' , 'member1');
     16     $redis->sAdd('key1' , 'member2');
     17     $redis->sAdd('key1' , 'member3'); /* 'key1' => {'member1', 'member2', 'member3'}*/
     18     $redis->sCard('key1'); /* 3 */
     19     $redis->sCard('keyX'); /* 0 */
     20     
     21     /* 返回n个set的差集
     22      * @param key set1
     23      * ...
     24      * @param key setn
     25      * @return array 差集
     26      */
     27     $redis->delete('s0', 's1', 's2');
     28     $redis->sAdd('s0', '1');
     29     $redis->sAdd('s0', '2');
     30     $redis->sAdd('s0', '3');
     31     $redis->sAdd('s0', '4');
     32     $redis->sAdd('s1', '1');
     33     $redis->sAdd('s2', '3');
     34     var_dump($redis->sDiff('s0', 's1', 's2')); // array(0=>'2',1=>'4')
     35     
     36     /* 求差集,并把差集保存在第一个set中
     37      * @param key set1
     38      * ...
     39      * @param key setn
     40      * @return int 返回差集元素个数或者false
     41      */
     42     $redis->delete('s0', 's1', 's2');
     43     $redis->sAdd('s0', '1');
     44     $redis->sAdd('s0', '2');
     45     $redis->sAdd('s0', '3');
     46     $redis->sAdd('s0', '4');
     47     $redis->sAdd('s1', '1');
     48     $redis->sAdd('s2', '3');
     49     var_dump($redis->sDiffStore('dst', 's0', 's1', 's2'));    //2
     50     var_dump($redis->sMembers('dst'));    //array(0=>'2',1=>'4')
     51     
     52     /* 求交集,
     53      * @param key set1
     54      * ...
     55      * @param key setn
     56      * @return array 差集
     57      */
     58     $redis->sAdd('key1', 'val1');
     59     $redis->sAdd('key1', 'val2');
     60     $redis->sAdd('key1', 'val3');
     61     $redis->sAdd('key1', 'val4');
     62     $redis->sAdd('key2', 'val3');
     63     $redis->sAdd('key2', 'val4');
     64     $redis->sAdd('key3', 'val3');
     65     $redis->sAdd('key3', 'val4');
     66     var_dump($redis->sInter('key1', 'key2', 'key3'));    //array(0=>'val3',1=>'val4')
     67     
     68     /* 求交集,并把差集保存在第一个set中
     69      * @param key set1
     70      * ...
     71      * @param key setn
     72      * @return int 返回交集元素个数或者false
     73      */
     74     $redis->sAdd('key1', 'val1');
     75     $redis->sAdd('key1', 'val2');
     76     $redis->sAdd('key1', 'val3');
     77     $redis->sAdd('key1', 'val4');
     78     $redis->sAdd('key2', 'val3');
     79     $redis->sAdd('key2', 'val4');
     80     $redis->sAdd('key3', 'val3');
     81     $redis->sAdd('key3', 'val4');
     82     var_dump($redis->sInterStore('output', 'key1', 'key2', 'key3'));    //2 
     83     var_dump($redis->sMembers('output'));    // array(0=>'val3',1=>'val4')
     84     
     85     /* 判断value是否在set里面,别名:sContains
     86      * @param key 
     87      * @param value 
     88      * @return bool 包含返回true,失败返回false
     89      */
     90     $redis->sAdd('key1' , 'member1');
     91     $redis->sAdd('key1' , 'member2');
     92     $redis->sAdd('key1' , 'member3'); /* 'key1' => {'member1', 'member2', 'member3'}*/
     93     $redis->sIsMember('key1', 'member1'); /* TRUE */
     94     $redis->sIsMember('key1', 'memberX'); /* FALSE */
     95     
     96     /* 返回一个set
     97      * @param key set
     98      * @param array set_val_array
     99      */
    100     $redis->delete('s');
    101     $redis->sAdd('s', 'a');
    102     $redis->sAdd('s', 'b');
    103     $redis->sAdd('s', 'a');
    104     $redis->sAdd('s', 'c');
    105     var_dump($redis->sMembers('s'));    //array(0=>'c',1=>'a',3=>'b')
    106     
    107     /* 将set1中元素移动set2中,set1不保留
    108      * @param key scrkey 
    109      * @param key deskey 
    110      * @param value 元素
    111      * @return bool 成功返回true,失败返回false
    112      */
    113      $redis->sAdd('key1' , 'member11');
    114     $redis->sAdd('key1' , 'member12');
    115     $redis->sAdd('key1' , 'member13'); /* 'key1' => {'member11', 'member12', 'member13'}*/
    116     $redis->sAdd('key2' , 'member21');
    117     $redis->sAdd('key2' , 'member22'); /* 'key2' => {'member21', 'member22'}*/
    118     $redis->sMove('key1', 'key2', 'member13'); 
    119     /* 'key1' =>  {'member11', 'member12'} */
    120     /* 'key2' =>  {'member21', 'member22', 'member13'} */
    121     
    122     /* 移除并返回随机一个元素从set中
    123      * @param string key
    124      * @return bool/string 元素返回值或者false
    125      */
    126     $redis->sAdd('key1' , 'member1');
    127     $redis->sAdd('key1' , 'member2');
    128     $redis->sAdd('key1' , 'member3'); /* 'key1' => {'member3', 'member2', 'member1'}*/
    129     $redis->sPop('key1'); /* 'member1', 'key1' => {'member3', 'member2'} */
    130     $redis->sPop('key1'); /* 'member3', 'key1' => {'member2'} */
    131     
    132     /* 随机返回一个元素,但是不移除该元素
    133      * @param key list 
    134      * @param int(optional) 
    135      * 如果count是整数且小于元素的个数,返回含有 count
    136      * 个不同的元素的数组,如果count是个整数且大于集合中元素的个数时,
    137      * 仅返回整个集合的所有元素,当count是负数,
    138      * 则会返回一个包含count的绝对值的个数元素的数组,
    139      * 如果count的绝对值大于元素的个数,则返回的结果集里会出现一个元素出现多次的情况
    140      * @return string/array/false 如果不提供count参数,则返回元素,如果提供count,
    141      * 则返回元素数组,如果有误,则返回false
    142      */
    143     $redis->sAdd('key1' , 'member1');
    144     $redis->sAdd('key1' , 'member2');
    145     $redis->sAdd('key1' , 'member3');     /* 'key1' => {'member3', 'member1', 'member2'}*/
    146     // No count
    147     $redis->sRandMember('key1');        /* 'member1', 'key1' => {'member3', 'member1', 'member2'} */
    148     $redis->sRandMember('key1');         /* 'member3', 'key1' => {'member3', 'member1', 'member2'} */
    149     // With a count
    150     $redis->sRandMember('key1', 3);     // Will return an array with all members from the set
    151     $redis->sRandMember('key1', 2);     // Will an array with 2 members of the set
    152     $redis->sRandMember('key1', -100);     // Will return an array of 100 elements, picked from our set (with dups)
    153     $redis->sRandMember('empty-set', 100); // Will return an empty array
    154     $redis->sRandMember('not-a-set', 100); // Will return FALSE
    155     
    156     /* 移除set中元素
    157      * @param string set 
    158      * @param string key1 要移除的元素key 
    159      * @...
    160      * @return int 返回移除元素个数
    161      */
    162     $redis->sAdd('key1' , 'member1');
    163     $redis->sAdd('key1' , 'member2');
    164     $redis->sAdd('key1' , 'member3'); /* 'key1' => {'member1', 'member2', 'member3'}*/
    165     $redis->sRem('key1', 'member2', 'member3'); /*return 2. 'key1' => {'member1'} */
    166     
    167     /* 合并多个set且返回结果
    168      * @param string set1 
    169      * @param ...
    170      * @return arrray 合并后结果
    171      */
    172     $redis->delete('s0', 's1', 's2');
    173     $redis->sAdd('s0', '1');
    174     $redis->sAdd('s0', '2');
    175     $redis->sAdd('s1', '3');
    176     $redis->sAdd('s1', '1');
    177     $redis->sAdd('s2', '3');
    178     $redis->sAdd('s2', '4');
    179     var_dump($redis->sUnion('s0', 's1', 's2'));
    180     
    181     /* 参考sUnion函数,却别在意该函数会保存结果
    182      * @param string key 保存结果的key
    183      * @param string set1 
    184      * @param ...
    185      * @return arrray 合并后结果
    186      */
    187     $redis->delete('s0', 's1', 's2');
    188     $redis->sAdd('s0', '1');
    189     $redis->sAdd('s0', '2');
    190     $redis->sAdd('s1', '3');
    191     $redis->sAdd('s1', '1');
    192     $redis->sAdd('s2', '3');
    193     $redis->sAdd('s2', '4');
    194     var_dump($redis->sUnionStore('dst', 's0', 's1', 's2'));        //int(4)
    195     var_dump($redis->sMembers('dst'));    //array(4) {[0]=>string(1) "3" [1]=>string(1) "4" [2]=>string(1) "1" [3]=>string(1) "2" }
    196     
    197     /* 遍历set集合
    198      * @param string 迭代器
    199      * @param long(引用) 
    200      * @param string optional 匹配模式
    201      * @param long count 
    202      * @return array/boolean 
    203      */
    204     $it = NULL;
    205     $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); /* don't return empty results until we're done */
    206     while($arr_mems = $redis->sscan('set', $it, "*pattern*")) {
    207         foreach($arr_mems as $str_mem) {
    208             echo "Member: $str_mem
    ";
    209         }
    210     }
    211 
    212     $it = NULL;
    213     $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_NORETRY); /* return after each iteration, even if empty */
    214     while(($arr_mems = $redis->sscan('set', $it, "*pattern*"))!==FALSE) {
    215         if(count($arr_mems) > 0) {
    216             foreach($arr_mems as $str_mem) {
    217                 echo "Member found: $str_mem
    ";
    218             }
    219         } else {
    220             echo "No members in this iteration, iterator value: $it
    ";
    221         }
    222     }
    223     
    224     /* 添加一个或多个成员到有序集合中,如果存在则更新权重
    225      * @param key 集合
    226      * @param double score 权重
    227      * @param string val 值
    228      * @param long  成功返回1,失败返回0 
    229      */
    230     $redis->zAdd('key', 1, 'val1');
    231     $redis->zAdd('key', 0, 'val0');
    232     $redis->zAdd('key', 5, 'val5');
    233     $redis->zRange('key', 0, -1); // array(val0, val1, val5)
    234     
    235     /* 返回有序集合大小
    236      * @param key 
    237      * @return long 大小
    238      */
    239     $redis->zAdd('key', 0, 'val0');
    240     $redis->zAdd('key', 2, 'val2');
    241     $redis->zAdd('key', 10, 'val10');
    242     $redis->zSize('key'); /* 3 */
    243     
    244     /* 获取指定权重范围的子集中元素个数
    245      * @param int start 
    246      * @param int end 
    247      * @return long 子集个数
    248      */
    249     $redis->zAdd('key', 0, 'val0');
    250     $redis->zAdd('key', 2, 'val2');
    251     $redis->zAdd('key', 10, 'val10');
    252     $redis->zCount('key', 0, 3); /* 2, corresponding to array('val0', 'val2') */
    253     
    254     /* 增加一个量给权重
    255      * @param string key 
    256      * @param double value 
    257      * @param string k-value 
    258      * @return double 新的权重值
    259      */
    260     $redis->delete('key');
    261     $redis->zIncrBy('key', 2.5, 'member1'); /* key or member1 didn't exist, so member1's score is to 0 before the increment */  /* and now has the value 2.5  */
    262     $redis->zIncrBy('key', 1, 'member1'); /* 3.5 */
    263     
    264     /* 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。
    265      * 对于集合中每一个元素的score,在进行AGGREGATE运算前,
    266      * 都要乘以对于的WEIGHT参数。
    267      * 如果没有提供WEIGHT,默认为1。
    268      * 默认的AGGREGATE是SUM,
    269      * 即结果集合中元素的score是所有集合对应元素进行SUM运算的值,
    270      * 而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。
    271      * @param string keyOutput 保存结果key 
    272      * @param array arrayZSetKeys 交集数组key 
    273      * @param array arrayWeights 权重数组
    274      * @param aggregateFunction Either SUM/MIN/MAX
    275      * @return long 交集数量
    276      */
    277     $redis->delete('k1');
    278     $redis->delete('k2');
    279     $redis->delete('k3');
    280     $redis->delete('ko1');
    281     $redis->delete('ko2');
    282     $redis->delete('ko3');
    283     $redis->delete('ko4');
    284     $redis->zAdd('k1', 0, 'val0');
    285     $redis->zAdd('k1', 1, 'val1');
    286     $redis->zAdd('k1', 3, 'val3');
    287     $redis->zAdd('k2', 2, 'val1');
    288     $redis->zAdd('k2', 3, 'val3');
    289     $redis->zInter('ko1', array('k1', 'k2'));               /* 2, 'ko1' => array('val1', 'val3') */
    290     $redis->zInter('ko2', array('k1', 'k2'), array(1, 1));  /* 2, 'ko2' => array('val1', 'val3') */
    291     /* Weighted zInter */
    292     $redis->zInter('ko3', array('k1', 'k2'), array(1, 5), 'min'); /* 2, 'ko3' => array('val1', 'val3') */
    293     $redis->zInter('ko4', array('k1', 'k2'), array(1, 5), 'max'); /* 2, 'ko4' => array('val3', 'val1') */
    294     
    295     /* 获取指定下标范围的有序集合范围子集
    296      * @param string key 集合
    297      * @param long start 
    298      * @param long end 
    299      * @param withscore:bool=false 
    300      * @return array 返回子集数组
    301      */
    302     $redis->zAdd('key1', 0, 'val0');
    303     $redis->zAdd('key1', 2, 'val2');
    304     $redis->zAdd('key1', 10, 'val10');
    305     $redis->zRange('key1', 0, -1); /* array('val0', 'val2', 'val10') */
    306     // with scores
    307     $redis->zRange('key1', 0, -1, true); /* array('val0' => 0, 'val2' => 2, 'val10' => 10) */
    308     
    309     /* 获取指定范围权重的子集
    310      * @param key 有序集合
    311      * @param int start 
    312      * @param int end 
    313      * @param array withscores => TRUE / limit => array($offset, $count)
    314      * @return array 子集 
    315      */ 
    316     $redis->zAdd('key', 0, 'val0');
    317     $redis->zAdd('key', 2, 'val2');
    318     $redis->zAdd('key', 10, 'val10');
    319     $redis->zRangeByScore('key', 0, 3); /* array('val0', 'val2') */
    320     $redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE); /* array('val0' => 0, 'val2' => 2) */
    321     $redis->zRangeByScore('key', 0, 3, array('limit' => array(1, 1)); /* array('val2') */
    322     $redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE, 'limit' => array(1, 1)); /* array('val2' => 2) */
    323     
    324     /* 获取子集
    325      * 不清楚,看例子清楚很多
    326      */
    327     foreach(Array('a','b','c','d','e','f','g') as $c)
    328         $redis->zAdd('key',0,$c);
    329     $redis->zRangeByLex('key','-','[c') /* Array('a','b','c'); */
    330     $redis->zRangeByLex('key','-','(c') /* Array('a','b') */
    331     $redis->zRangeByLex('key','-','[c',1,2) /* Array('b','c') */
    332     
    333     /* 返回key对应的权重
    334      * @param key 集合
    335      * @param string member key 
    336      * @return long 元素对应的权重
    337      */
    338     $redis->zAdd('key', 1, 'one');
    339     $redis->zAdd('key', 2, 'two');
    340     $redis->zRank('key', 'one'); /* 0 */
    341     $redis->zRank('key', 'two'); /* 1 */
    342     $redis->zRevRank('key', 'one'); /* 1 */
    343     $redis->zRevRank('key', 'two'); /* 0 */
    344     
    345     /* 删除有序集合中元素,别名:zDelete
    346      * @param string key 集合
    347      * @param string member 元素
    348      * @param long 成功返回1,失败返回0 
    349      */
    350     $redis->zAdd('key', 0, 'val0');
    351     $redis->zAdd('key', 2, 'val2');
    352     $redis->zAdd('key', 10, 'val10');
    353     $redis->zDelete('key', 'val2');
    354     $redis->zRange('key', 0, -1); /* array('val0', 'val10') */
    355     
    356     /* 移除指定权重范围的元素
    357      * @param string key 集合
    358      * @param long start 下标开始
    359      * @param long end  下标结束
    360      * @return long  删除元素个数
    361      */
    362     $redis->zAdd('key', 10, 'one');
    363     $redis->zAdd('key', 20, 'two');
    364     $redis->zAdd('key', 30, 'three');
    365     $redis->zRemRangeByRank('key', 0, 1); /* 2 */
    366     $redis->zRange('key', 0, -1); /* array('three' => 3) */
    367     
    368     /* 移除权重范围内的元素,别名:zDeleteRangeByScore
    369      * @param string key 集合
    370      * @param double/string start 权重下限 
    371      * @param double/string end 权重上限 
    372      * @return long 删除元素个数 
    373      */
    374     $redis->zAdd('key', 0, 'val0');
    375     $redis->zAdd('key', 2, 'val2');
    376     $redis->zAdd('key', 10, 'val10');
    377     $redis->zRemRangeByScore('key', 0, 3); /* 2 */
    378     
    379     /* 倒序集合
    380      * @param long start 开始下标
    381      * @param long end 结束下标
    382      * @param bool=false 是否返回权重 
    383      * @return array 倒序集合数组
    384      */
    385     $redis->zAdd('key', 0, 'val0');
    386     $redis->zAdd('key', 2, 'val2');
    387     $redis->zAdd('key', 10, 'val10');
    388     $redis->zRevRange('key', 0, -1); /* array('val10', 'val2', 'val0') */
    389     $redis->zRevRange('key', 0, -1, true); /* array('val10' => 10, 'val2' => 2, 'val0' => 0) */
    390     
    391     
    392     /* 获取元素权重
    393      * @param key 集合
    394      * @param string member 元素 
    395      * @return duble 权重 
    396      */
    397     $redis->zAdd('key', 2.5, 'val2');
    398     $redis->zScore('key', 'val2'); /* 2.5 */
    399     
    400     /* 求并集,并保存在一个参数
    401      * 看例子吧
    402      */
    403     $redis->delete('k1');
    404     $redis->delete('k2');
    405     $redis->delete('k3');
    406     $redis->delete('ko1');
    407     $redis->delete('ko2');
    408     $redis->delete('ko3');
    409     $redis->zAdd('k1', 0, 'val0');
    410     $redis->zAdd('k1', 1, 'val1');
    411     $redis->zAdd('k2', 2, 'val2');
    412     $redis->zAdd('k2', 3, 'val3');
    413     $redis->zUnion('ko1', array('k1', 'k2')); /* 4, 'ko1' => array('val0', 'val1', 'val2', 'val3') */
    414     /* Weighted zUnion */
    415     $redis->zUnion('ko2', array('k1', 'k2'), array(1, 1)); /* 4, 'ko2' => array('val0', 'val1', 'val2', 'val3') */
    416     $redis->zUnion('ko3', array('k1', 'k2'), array(5, 1)); /* 4, 'ko3' => array('val0', 'val2', 'val3', 'val1') */
    417     
    418     /* 遍历set集合
    419      *
    420      */
    421     $it = NULL;
    422     $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
    423     while($arr_matches = $redis->zscan('zset', $it, '*pattern*')) {
    424         foreach($arr_matches as $str_mem => $f_score) {
    425             echo "Key: $str_mem, Score: $f_score
    ";
    426         }
    427     }
  • 相关阅读:
    2. Get the codes from GIT
    1. Install Git and GitExtension
    [Git]Git的常用命令
    测试用例Excel模板For Quality Center
    测试用例excel模板
    如何在win 2008 server和win 7上add web site
    Jmeter运行过程中如何让Fiddler同时可以抓获到服务器的应答报文
    Windows系统文件mshtml.dll
    Jmeter中的XPath Assertion
    AIM Tech Round (Div. 2) B
  • 原文地址:https://www.cnblogs.com/pandang/p/4978779.html
Copyright © 2011-2022 走看看