* Created by Zend Studio.
* User: Xuzhz <857328943@qq.com>
* 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;
}
}