【Redis+PHP】利用redis的zset实现游戏排行榜功能
2021-05-03 05:29
标签:北京 exception 行存储 积分 htm cti ann blog min 1、需求:①完成游戏排行榜实时刷新 ②查看当前用户的排名、积分 2、参考文章:https://www.cnblogs.com/clubs/p/11691580.html (博主强推) https://www.cnblogs.com/anny-1980/p/4583806.html (Redis的ZSET有序集合常用语法) 3、实现原理:不使用MySQL进行存储,改用redis的zset实现,单机支持百万级并发,数据热更新 4、附录我自己封装好的一个laravel5的Redis排行榜类: 【Redis+PHP】利用redis的zset实现游戏排行榜功能 标签:北京 exception 行存储 积分 htm cti ann blog min 原文地址:https://www.cnblogs.com/xuzhengzong/p/12123009.htmlphp
/**
* Created by Zend Studio.
* User: Xuzhz
* name: Redis的ZSET 实现游戏排行榜实时刷新
* Date: 2019年12月30日
* Time: 下午4:30:23
*/
namespace App\Dao;
use Illuminate\Support\Facades\Redis;
class AtminiRankDao
{
/**
* 新增|递增 有序集合元素
* @param : $key 集合名称; $value 用户标识id; $score 权重;
* @return : boolean
* date: 2019年12月30日下午4:36:46
* author: xzz
*/
public static function set($key=‘北京‘, $value=1, $score=0)
{
try {
Redis::ZINCRBY($key, $score, $value);
log_write(‘用户分数接口:事件-用户分数增加,用户ID-‘.$value.‘, 分数增加量-‘.$score.‘, 所属榜单-‘.$key);
Redis::ZINCRBY(‘全国‘, $score, $value);
log_write(‘用户分数接口:事件-用户分数增加,用户ID-‘.$value.‘, 分数增加量-‘.$score.‘, 所属榜单-全国‘);
return true;
} catch (\Exception $e) {
return false;
}
}
public static function add($key=‘北京‘, $value=1, $score=0)
{
try {
Redis::ZADD($key, $score, $value);
log_write(‘用户分数接口:事件-新增用户,用户ID-‘.$value.‘, 分数增加量-‘.$score.‘, 排行榜-‘.$key);
Redis::ZADD(‘全国‘, $score, $value);
log_write(‘用户分数接口:事件-新增用户,用户ID-‘.$value.‘, 分数增加量-‘.$score.‘, 所属榜单-全国‘);
return true;
} catch (\Exception $e) {
return false;
}
}
/**
* 获取指定KEY排行榜倒序排名,可选择同时返回权重
* @param : $key 集合名称; $start 开始下标; $stop 结束下标(-1全部); $withscores 是(true)否(false)返回权重score
* @return : array , 包含排名、value、score
* date: 2019年12月30日下午4:46:11
* author: xzz
*/
public static function zrevrange($key=‘全国‘, $start=0, $stop=-1, $withscores=true)
{
$rank = [];
if ($withscores === true) {
$rank = Redis::ZREVRANGE($key, $start, $stop, ‘withscores‘);
} else {
$rank = Redis::ZREVRANGE($key, $start, $stop);
}
return $rank;
}
/**
* 获取指定KEY集合中某value对应的排名
* @param : $key 集合名称; $value 具体值(用户id); $flag 是(true)否(false)倒序
* @return : int or false
* date: 2019年12月30日下午4:59:26
* author: xzz
*/
public static function zrevrank($key=‘全国‘, $value=1, $flag=true)
{
$index = false;
try {
if ($flag === true) {
$index = Redis::ZREVRANK($key, $value);
} else {
$index = Redis::ZRANK($key, $value);
}
} catch (\Exception $e) {
return false;
}
return $index;
}
/**
* 获取指定KEY集合中某value的实时权重
* @param : $key 集合名称; $value 具体值(用户id)
* @return : int or false
* date: 2019年12月30日下午4:59:26
* author: xzz
*/
public static function zscore($key=‘全国‘, $value=1)
{
$index = 0;
try {
$index = Redis::ZSCORE($key, $value);
} catch (\Exception $e) {
return false;
}
return $index;
}
}
文章标题:【Redis+PHP】利用redis的zset实现游戏排行榜功能
文章链接:http://soscw.com/index.php/essay/81665.html