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\n";
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\n";
218             }
219         } else {
220             echo "No members in this iteration, iterator value: $it\n";
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\n";
426         }
427     }