PHP Redis – zSet(有序集合)

有序集合与集合一样,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);
链接到文章: https://ixvps.com/47834.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注