ZSET操作集合

in 默认分类 with 0 comment

手册:https://www.php.cn/manual/view/36530.html

创建

#元素已存在,会更新排序值(score)
var_dump($redis->zadd('zset',11,'c'));

获取

#根据开始结束索引获取集合中的元素,-1表示最后一个,排序值越大的越靠后,如果相等,则后添加的靠后
$redis->zrange('zset',0,-1);
#反转排序,与zrange效果相反
$redis->zrevrange('zset',0,-1);
#获取指定元素(a)的索引(下标)
$redis->zrank('zset','a');
#获取指定元素(a)的排序值
$redis->zscore('zset','a');
#获取有序集合中元素个数
$redis->zcard('zset');
#获取指定范围的元素个数
$redis->zcount('zset',min,max);

删除

#删除有序集合中一个或多个元素,删除ab元素
$redis->zrem('zset','a','b');

修改

#为有序集的元素(a)的排序值增加2
$redis->zincrby('zset',2,'a');

/**
*

*/

// //将一个或多个元素插入到集合里面,默认从尾部开始插入
// //如果要在头部插入,则找一个元素,在元素后面添加一个你需要插入的元素即可
// $redis->zAdd('sorted1',100,'坑啊',98.999,99,90,90,80,80,60,60,70,70);
// // $redis->zAdd('集合',浮点数(元素),'key',(插入头部的数据),key);

// //返回有序集中指定区间内的成员。成员按分数值递增排序,分数值相同的则按字典序来排序。
// //参数:第四个参数表示是否返回各个元素的分数值,默认为false。
// $redis->zRange('sorted', 0, -1, true);

// //返回有序集中指定区间内的成员。成员按分数值递减排序,分数值相同的则按字典序的倒序来排序。
// $redis->zReverseRange('sorted', 0, -1, true);

// //返回有序集中指定分数区间的成员列表,按分数值递增排序
// $redis->zRangeByScore('sorted', 10, 99);
// //自定义返回的序集返回起始位置及条数
// $redis->zRangeByScore('sorted', 0,90,['limit' =>[0,2]]);

//返回有序集中指定分数区间的成员列表,按分数值递减排序,分数值相同的则按字典序的倒序来排序。注意,区间表示的时候大值在前,小值在后。
// $redis->zRevRangeByScore('sorted', 100, 90);

// //迭代有序集合中的元素。
// //可理解为查找指定的值,将元素修改为float类型
// //返回值:[元素名=>分数值,,..]
// $redis->zscan('sorted', $it, 100, 10);

// //返回指定有序集的元素数量,序集的长度。
// $redis->zCard('sorted');

// //返回有序集中指定分数区间的成员数量。
// $redis->zCount('sorted', 90, 100);

// //返回有序集中指定成员的分数值。若成员不存在则返回false。
// $redis->zScore('sorted', 'math');

// //返回有序集中指定成员元素的大小排名,按分数值递增排序。分数值最小者排名为0。
// $redis->zRank('sorted', 60);

// //返回有序集中指定成员元素的排名,按分数值递减排序。分数值最大者排名为0。
// $redis->zRevRank('sorted', 70);

// //删除有序集中的一个或多个成员,忽略不存在的成员。返回删除的元素个数。
// $redis->zRem('sorted', 'chemistry', 'English');

// //删除有序集中指定排名区间的所有成员,返回删除元素个数
// $redis->zRemRangeByRank('sorted', 0, 2);

// //删除有序集中指定分数值区间的所有成员,返回删除元素的个数
// $redis->zRemRangeByScore('sorted', 80, 90);

// //对有序集中指定成员的分数值增加指定增量值。若为负数则做减法,若有序集不存在则先创建,若有序集中没有对应成员则先添加,最后再操作。
// $redis->zIncrBy('sorted', 2, 'Chinese');

// //计算给定一个或多个有序集的交集,元素相加,并将其存储到目的有序集中
// $redis->zinterstore('zset3',['sorted','sorted1']);

// //计算给定一个或多个有序集的并集,元素相加,并将其存储到目的有序集中
// $redis->zunionstore('zset3',['sorted', 'sorted1']);

<?php

$redis = new redis();
$result = $redis->connect('127.0.0.1', 6379);
if ($result !== true) {

echo "连接redis失败!";
exit;

}
$result = $redis->auth('123456'); //密码
if ($result !== true) {

echo "auth err";
exit;

}

echo "<pre>";

//有序集合
//常见操作,
echo "1、添加成员到集合里<br/>";
//添加数据到key为sort里
$redis->zAdd('sort', 80, 'mrtwenty'); //存在就修改, 不存在就添加到集合中去
$redis->zAdd('sort', 92, 'xiaohei');
$redis->zAdd('sort', 99, 'zhao');
$redis->zAdd('sort', 90, 'xiaoming');
//A如果不存在,就添加A进入,并初始化值为1,如果存在就给A加1,分数1也可以是负的,
$redis->zIncrBy('sort', 1, 'A');
print_r($redis->zRange('sort', 0, -1));
echo "<hr/>";

echo "2、取出前三名<br/>";
$list = $redis->zRevRange('sort', 0, 2);
print_r($list);

echo "取出前三名,包括他们的值<br/>";
$list = $redis->zRevRange('sort', 0, 2, true);
print_r($list);
echo "<hr/>";

echo "3、zDelete、zRem、zRemove 删除指定成员,返回的值1表示成功, 0表示失败<hr/>";
$result = $redis->zDelete('sort', 'A');

echo "4、取出某个成员的排名或者分数<br/>";
printf("返回集合中zhao的分数:%d<br/>", $redis->zScore('sort', 'zhao'));
//如果返回false表示不存在集合中,0表示第一名 zRevRank 从大到小排名 zRank 从小到大排名
printf("返回zhao在集合中的排名:%d<hr/>", $redis->zRevRank('sort', 'zhao'));

printf("5、统计数量:%d<hr/>", $redis->zSize('sort')); //也可以值zCard

printf("6、返回80分到100分之间的个数:%d<hr/>", $redis->zCount('sort', 80, 100));

echo "7、取出满足指定分数区间的成员,总小到大<br/>";
$list = $redis->zRangeByScore('sort', 90, 100);
//withscores表示是否取出分数,limit用来实现分页
// $list = $redis->zRangeByScore('sort', 90, 100, ['withscores' => true, 'limit' => [0, 2]]);
print_r($list);
echo "<hr/>";

//8、取出所有的key,0表示从第一个开始取,-1表示最后一个
echo "8、取出所有成员:<br/>";
$list = $redis->zRange('sort', 0, -1);
print_r($list);

Responses