php 游戏实时排行榜,【Redis+PHP】利用redis的zset实现游戏排行榜功能

该代码片段展示了如何利用Redis的ZSET数据结构来实现实时更新游戏排行榜。通过ZINCRBY和ZADD方法增加用户分数并记录日志,ZREVRANGE方法获取倒序排名,ZREVRANK和ZSCORE方法分别获取用户排名和权重。这些功能确保了排行榜数据的即时性和准确性。
摘要由CSDN通过智能技术生成

* Created by Zend Studio.

* User: Xuzhz

* name: Redis的ZSET 实现游戏排行榜实时刷新

* Date: 2019年12月30日

* Time: 下午4:30:23*/

namespaceApp\Dao;

use Illuminate\Support\Facades\Redis;classAtminiRankDao

{/**

* 新增|递增 有序集合元素

* @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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值