您的位置:首页 > 数据库 > Redis

游戏开发中redis的使用

2014-04-07 15:02 453 查看
<?php
class RedisCAO extends CAO
{
private $_redis_rank = 'redis_rank';

protected function mao_config($type)
{
$maoconfig = null;
return false;
return $maoconfig;
}
public function getRedisConnect($type,$split_id)
{
$conf  = __redis_config_default('');
if ( class_exists('Redis'))
{
$redis = new Redis();
$redis->connect($conf['host'],$conf['port']);
$redis->select(REDIS_DB_1);
}
else
{
return false;
}
return $redis;
}
private function makeKey($type,$sid)
{
if(!$sid) return false;

return $type."_".$sid;
}
public function setUserValue($sid,$sid_uid,$value)
{
$redis = $this->getRedisConnect($this->_redis_rank, $sid);
if(!$redis) return false;
$key = $this->makeKey($this->_redis_rank, $sid);
if(!$key) return false;

$r = $redis->zadd($key,$value,$sid_uid);
$redis->close();
return $r;
}
public function delUser($sid,$sid_uid)
{
$redis = $this->getRedisConnect($this->_redis_rank, $sid);
if(!$redis) return false;
$key = $this->makeKey($this->_redis_rank, $sid);
if(!$key) return false;

$r = $redis->zrem($key,$sid_uid);
$redis->close();
return $r;
}
public function getTop($sid,$p=0,$page_size=5)
{

$redis = $this->getRedisConnect($this->_redis_rank, $sid);
if(!$redis) return false;
$key = $this->makeKey($this->_redis_rank, $sid);
if(!$key) return false;

//	return $redis->zRange($key, -1, -5, true); //TODO

$total = $redis->zcard($key);

$pages = (int)ceil($total/$page_size);

if(!$p || $total<=$page_size)
{
$data = $redis->zrevrange($key,0,-1,true);
}
else
{
$data = $redis->zrevrange($key,($p-1)*$page_size,$p*$page_size-1,true);
}
/*
if($total>100)
{
$redis->zremrangebyrank($key,100,$total);
}
*/
if(!$data) $data=array();

$redis->close();
return array('total'=>$total,'list'=>$data,'pages'=>$pages);
}
public function getoneRank($union_id,$sid)
{
$redis = $this->getRedisConnect($this->_redis_rank, $key);
$key = $this->makeKey($this->_redis_rank, $sid);
if(!$redis) return false;
$r['value'] = $redis->zscore($key,$union_id);
$r['list'] = $redis->zrevrank($key,$union_id);
$redis->close();
return $r;
}
/*
* 挑战联盟列表
*/
public function getUnionpkExpTop($exp_start,$exp_end,$key='union:exp:top')
{
$redis = $this->getRedisConnect($this->_redis_key_union_list, $key);
if(!$redis) return false;
$res = $redis->zrangebyscore($key,$exp_start,$exp_end,array('withscores' =>false,'limit'=>array(0, 100)));
if(empty($res) || count($res)<5 )
{
$total = $redis->zcard($key);
$page_size=50;
$pages = (int)ceil($total/$page_size);
if($pages>1)
{
$p = rand(1,$pages);
}
else
{
$p = 1;
}
$res = $redis->zrevrange($key,($p-1)*$page_size,$p*$page_size-1);
}
$redis->close();
shuffle($res);
return $res;
}
public function getUnionExpTopRank($union_id)
{
$redis = $this->getRedisConnect($this->_redis_key_union_list, $key);
if(!$redis) return false;
$r = $redis->zrevrank('union:exp:top',$union_id);
$redis->close();
return $r;
}
public function getUnionExpTopExp($union_id)
{
$redis = $this->getRedisConnect($this->_redis_key_union_list, $key);
if(!$redis) return false;
$r = $redis->zscore('union:exp:top',$union_id);
$redis->close();
return $r;
}

/**
* @用于申请
* @redis 存帮派id list
*/
public function addSearchId($union_id)
{
$redis = $this->getRedisConnect($this->_redis_key_union_list, $union_id);
if(!$redis) return false;
$r = $redis->zadd('union:apply:list', $union_id, $union_id);
$redis->close();
return $r;
}
public function delSearchId($union_id)
{
$redis = $this->getRedisConnect($this->_redis_key_union_list, $union_id);
if(!$redis) return false;
$r = $redis->zrem('union:apply:list',$union_id);
$redis->close();
if(!$r) return false;
}
public function getSearchList($union_id)
{
$redis = $this->getRedisConnect($this->_redis_key_union_list, $union_id);
if(!$redis) return false;

$total = $redis->zcard('union:apply:list');
$page_size=10;
$pages = (int)ceil($total/$page_size);
if($pages>1)
{
$p = rand(1,$pages);
}
else
{
$p = 1;
}
$data = $redis->zrevrange('union:apply:list',($p-1)*$page_size,$p*$page_size-1);

if(!$data) $data=array();

$redis->close();
return $data;
}

}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: