当前位置:首页 > Web开发 > 正文

用户ID- ‘ .$value. ‘

2024-03-31 Web开发

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排行榜类:

<?php /** * Created by Zend Studio. * User: Xuzhz <[email protected]> * 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实现游戏排行榜成果

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32605.html