Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。处理元素时,也要加上score的处理
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
添加元素(zAdd)
1 2 3 4 5
| $redis->zAdd('zSet', 10, 'A'); $redis->zAdd('zSet', 106, 'B'); $redis->zAdd('zSet', 20, 'C'); $redis->zAdd('zSet', 15, 'D'); $redis->zAdd('zSet', 11, 'E');
|
元素分值增减(zIncrBy)
1 2
| $redis->zIncrBy('zSet', 20.5, 'A'); // 30.5 $redis->zIncrBy('zSet', 12, 'B'); // 128
|
获取根据 score 排序后的数据段(zRange,zRevRange)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| // 升序 $redis->zRange('zSet', 0, -1) //array (size=5) // 0 => string 'E' (length=1) // 1 => string 'D' (length=1) // 2 => string 'C' (length=1) // 3 => string 'A' (length=1) // 4 => string 'B' (length=1)
// 降序 // 分值前三 $redis->zRevRange('zSet', 0, 2, true); //array (size=3) // 'B' => float 118 // 'A' => float 30.5 // 'C' => float 20
|
获取 score 过滤后排序的数据段(zRangeByScore,zRevRangeByScore)
根据分值过滤之后的列表
需要提供分值区间
1 2 3 4 5 6 7 8
| $redis->zAdd('key', 0, 'val0'); $redis->zAdd('key', 2, 'val2'); $redis->zAdd('key', 10, 'val10'); $redis->zRangeByScore('key', 0, 3); $redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE); $redis->zRangeByScore('key', 0, 3, array('limit' => array(1, 1)); $redis->zRangeByScore('key', 0, 3, array('limit' => array(1, 1)); $redis->zRangeByScore('key', 0, 3, array('withscores' => TRUE, 'limit' => array(1, 1));
|
获取元素个数(zCard)
1
| $redis->zCard('zSet'); //
|
获取区间内的元素个数(zCount)
1 2 3 4 5
| $redis->zAdd('key', 0, 'val0'); $redis->zAdd('key', 2, 'val2'); $redis->zAdd('key', 10, 'val10'); // 0 ~ 3 之间 $redis->zCount('key', 0, 3); // array('val0', 'val2')
|
获取元素的 score (zScore)
1
| $redis->zScore('zSet', 'A') // 30.5
|
获取某个元素在集合中的排名(zRank)
从0开始
1
| $redis->zRank('zSet', 'A'); // 3
|
删除元素(zRem)
1
| $redis->zRem('zSet', 'A');
|
根据排名来删除(zRemRangeByRank)
1 2
| //按照升序排序删除第一个和第二个元素 $redis->zRemRangeByRank('zSet', 0, 1)
|
根据区间来删除(zRemRangeByScore)
1 2
| //删除 score 在[15, 30]之间的元素 $redis->zRemRangeByScore('zSet', 15, 30);
|