有序集合与集合一样,string类型元素的集合,不允许重复的成员。
有序集合,每个元素都会关联一个 double 类型的分数。Redis 通过分数为集合的成员进行从小到大的排序
有序集合的成员是唯一的,但分数 (score) 可以重复。
集合是通过哈希表实现的, 集合中最大的成员数为 232 – 1 (4294967295, 每个集合可存储40多亿个成员)。
添加元素(zAdd)
// zAdd(key,increment,value)
$redis->zAdd('score', 550, '语文'); $redis->zAdd('score', 66, '高数'); $redis->zAdd('score', 77, '公共英语'); $redis->zAdd('score', 88, '计算机组成原理',99,'Java程序设计');
元素分值增减(zIncrBy)
// zIncrBy(key,increment,value);increment值可为正/负值 $redis->zIncrBy('score', -10, '语文');
$redis->zAdd('score', 10, '高数');
获取排行(zRevRange)
// 根据排序后的数据,升序和降序的列表获取 $redis->zRevRange('score', 0, 2);
获取指集合中成员排名(zRank,zRevRank)
// 返回有序集合中指定成员的排名。按分数值递减排序。分数值最大者排名为0。 $redis->zRevRank('score','语文');
// 返回有序集合中指定成员的排名,按分数值递增排序。分数值最小者排名为0。
$redis->zRank('score', 历史);
获取指定索引区间内的成员(Zrange,zReverseRange)
// Zrange('set_key', start, end,[true]) 。 true:是否返回各个元素的分数值,默认为false // 成员按分数值递增排序。具有相同分数值的成员按字典序倒序排列。 // start 和 stop 以 0 表示有序集第一个成员,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。 $redis->Zrange('score',0,-1,true); // zReverseRange('set_key', start, end,[true]) 成员按分数值递减排序,分数值相同的则按字典序的倒序排序
$redis->zReverseRange('score',0,-1,true);
获取指定分值区间的元素(zRangeByScore,zRevRangeByScore)
// zRangeByScore(key,min,max,[withscores]|[LIMIT offset count])
$redis->zRangeByScore('score',60,90,['withscores' => true]);
// zRevRangeByScore(key,max,min,[withscores]|[LIMIT offset count])
$redis->zRevRangeByScore('score',90,60,['withscores' => true]);
注:
['WITHSCORES' => true] 显示整个有序集合成员的 score 值
['LIMIT' =>[0,2]] 自定义返回的有序集合起始位置及条数
获取元素个数(zCard)
$redis->zCard('score');
获取指定分值区间内的元素个数(zCount)
$redis->zCount('score', 60, 90);
获取指定元素的 数据 (zScore)
$redis->zScore('score','历史')
计算有序集合中指定区间内成员数量(Zlexcount)
// Zlexcount('key_name','[value1','[value2') $redis->Zlexcount('score','[英语','[语文');
计算给定的有序集的交集数量(Zinterstore)
// 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该结果集储存到指定集合
// 默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和
// Zinterstore('zset_Key',['keys'|'keyt'])
$resdis->Zinterstore('score',['score1']);
计算给定的一个或多个有序集的并集/交集(Zunionstore/zinterstore)
//计算给定一个或多个有序集的交集,元素相加,并将其存储到目的有序集中
$redis->zinterstore(‘new_zset_key’,[‘score’,’score1′]);
//计算给定一个或多个有序集的并集,元素相加,并将其存储到目的有序集中
$redis->zunionstore(‘new_zset_key’,[‘score’, ‘score1’]);
删除元素(zRem)
// 删除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数
$redis->zRem('score', '历史','盈余');
根据排名删除(zRemRangeByRank)
// 自 0 开始
$redis->zRemRangeByRank('score', 0, 2);
根据指定分值区间删除(zRemRangeByScore)
//删除score在[60, 90]之间的元素 $redis->zRemRangeByScore('score', 60, 90);