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 }