使用Redis实现排行榜的功能 [ 新手入门 ]
<?php
use yii\base\Component;
use yii\redis\Connection;
class Leaderboard extends Component
{
public $redis = 'redis';
/**
* 添加用户分数
* @param int $userId 用户ID
* @param float $score 用户分数
* @return int|bool 返回添加后的排名,如果用户已存在,则返回false
*/
public function addUserScore($userId, $score)
{
$redis = \Yii::$app->{$this->redis};
// 将用户ID及分数添加到有序集合中
$rank = $redis->zadd('leaderboard', $score, $userId);
// 如果添加成功,则返回用户当前排名,否则返回false
return $rank ? $rank : false;
}
/**
* 获取用户排名
* @param int $userId 用户ID
* @return int 用户排名
*/
public function getUserRank($userId)
{
$redis = \Yii::$app->{$this->redis};
// 获取用户排名(从0开始)
return $redis->zrevrank('leaderboard', $userId);
}
/**
* 获取用户分数
* @param int $userId 用户ID
* @return float 用户分数
*/
public function getUserScore($userId)
{
$redis = \Yii::$app->{$this->redis};
// 获取用户分数
return $redis->zscore('leaderboard', $userId);
}
/**
* 获取排名前N的用户
* @param int $limit 需要获取的用户数量
* @return array 排名前N的用户信息,包括用户ID和分数
*/
public function getTopUsers($limit)
{
$redis = \Yii::$app->{$this->redis};
// 获取排名前N的用户信息
return $redis->zrevrange('leaderboard', 0, $limit - 1, 'WITHSCORES');
}
/**
* 获取排名在指定区间内的用户
* @param int $start 排名区间的起始位置(从0开始)
* @param int $stop 排名区间的结束位置(从0开始)
* @return array 排名在指定区间内的用户信息,包括用户ID和分数
*/
public function getUsersInRankRange($start, $stop)
{
$redis = \Yii::$app->{$this->redis};
// 获取排名在指定区间内的用户信息
return $redis->zrevrange('leaderboard', $start, $stop, 'WITHSCORES');
}
}
共 0 条回复
没有找到数据。
PHP学院的中学生
注册时间:2018-10-23
最后登录:2024-09-23
在线时长:168小时13分
最后登录:2024-09-23
在线时长:168小时13分
- 粉丝29
- 金钱4725
- 威望30
- 积分6705