public function actionRank(){
// 生成随机字符串
function get_random($len,$chars)
{
$hash = "";
$max = strlen($chars) - 1;
for ($i=0; $i < $len; $i++) {
$hash .= $chars[mt_rand(0,$max)];
}
return $hash;
}
$dd = Yii::$app->redis;
$cachkey = "rank_";
$check = $dd->exists($cachkey);
if($check){
$dd->del($cachkey);
}
for($i=0;$i<5;$i++){
$num = rand(0,100);
$str = get_random(6,'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ');
$dd->ZADD($cachkey,$num,'name='.$str);
}
//由大到小排序 ZREVRANGE salary 0 -1 WITHSCORES # 递减排列
$dataOne = $dd->ZREVRANGE($cachkey,0,-1,WITHSCORES);
// 由小到大排序 ZRANGE salary 0 -1 WITHSCORES # 递增排列
$dataTow = $dd->ZRANGE($cachkey,0,-1,WITHSCORES);
// print_r($dataOne);
print_r($dataOne);
$res1 = array();$i=0;
foreach ($dataOne as $k=>$v){
if(!is_numeric($v)){
//$ranks = $dd->ZRANK($cachkey,$v); //排名
//$res['ranks']=$ranks;
$res['name']=substr($v,5,-1);
}else{
$res['score']=$v;
}
array_push($res1,$res);
$i++;
}
$res2 = array();$ii=0;
foreach ($res1 as $k1=>$v1){
if(count($v1)==2 && $k1%2==1){
$res2[$ii]['name'] = $v1['name'];
$res2[$ii]['ranks'] = $ii+1;
$res2[$ii]['score'] = $v1['score'];
$ii++;
}
}
print_r($res2);
}
redis,有序集合实现排行榜
最新推荐文章于 2025-09-26 23:05:48 发布
该博客演示了如何利用PHP的Yii2框架与Redis进行交互,实现数据的存储和排序。通过生成随机字符串并设置分数,将数据存入有序集合(ZSET),然后使用ZREVRANGE和ZRANGE命令分别进行降序和升序排序。最后,从排序结果中提取出姓名和排名信息。这是一个关于Redis操作和数据排序的基础教程。
238

被折叠的 条评论
为什么被折叠?



