PHP网站redis缓存方式分析

PHP

作者:Wucl

时间:2014-02-05

章节内容:基础背景、分析内容、个人心得(这个人非常没品德,想到什么就写什么。)。

1.基础背景:

为了提高页面访问速度,降低访问数据库压力。

2.Redis缓存分析:

首先提出3个问题:

1)是否缓存整个网站中间件的数据?

2

3

现有两种预案:

A

B

A方案

开发角度:缓存操作比较频繁,但可以分担中间件部分的压力。

编辑角度:编辑数据后至多2-3分钟看到效果,因此可以不用通过操作清除缓存。

用户角度:假设以10分钟为一个时间段,那么在这个时间段里面页面加载表现为时快时慢。

B方案

开发角度:缓存不频繁,可以分担中间件很大部分的压力,建议用这个方式。

编辑角度:编辑后必须通过特定的操作清除以前的缓存。

用户角度:页面加载速度稳定且较快。

缓存与现有项目关联:

1)Redis建立连接(使用长连接):

pconnect:类的静态变量

privatestaticfunctiongetRedisObject($ip=’127.0.0.1′,$port=’6379′){

try{

if(isset(static::$pconnect[‘redis’.$ip.$port])){

$redis=static::$pconnect[‘redis’.$ip.$port];

}else{

$redis=newRedis();

$redis->pconnect($ip,$port);

$redis->select(1);

static::$pconnect[‘redis’]=$redis;

}

try{

$redis->ping();

}catch(\RedisException$e){

$redis->pconnect($ip,$port);

$redis->select(1);

static::$pconnect[‘redis’]=$redis;

}

}catch(\RedisException$e){

echo$e->getMessage().'<br>’;

}

return$redis;

}

2)主要应用3

$conn->delete($key)

$conn->get($key)

$conn->setex($key,$expire,$data)

3)注意异常RedisException

4)主从同步只要做一个操作:

slaveof127.0.0.16379

5)可以

privatefunctionredisConn(){

if(!empty(static::$memInstance[‘redis’])&&static::$memInstance[‘redis’]instanceofRedis){

$cacheConn=static::$memInstance[‘redis’];

try{

$cacheConn->ping();//链接未出异常,,则返回链接实例

return$cacheConn;

}catch(\RedisException$e){}

}

$cacheConn=null;

$tryI=0;

while($cacheConn==null&&$tryI<10){

try{

$cacheConn=newRedis();

$serverSetting=Config::$redis;

if(!$cacheConn->pconnect($serverSetting[$this->_serverType][‘ip’],$serverSetting[$this->_serverType][‘port’])){

$this->_serverType="default";

$cacheConn->pconnect($serverSetting[$this->_serverType][‘ip’],$serverSetting[$this->_serverType][‘port’]);

}

$cacheConn->setOption(Redis::OPT_SERIALIZER,Redis::SERIALIZER_NONE);

//选择DB

$redisDB=$serverSetting[$this->_serverType][‘redisDb’];

if($redisDB>0&&$redisDB<=16){

$cacheConn->select($redisDB);

}else{

$cacheConn->select(0);

}

}catch(\Exception$e){

sleep($tryI*0.3);

$tryI++;

$cacheConn=null;

}

}

static::$memInstance[‘redis’]=$cacheConn;

return$cacheConn;

}

未曾失败的人恐怕也未曾成功过。

PHP网站redis缓存方式分析

相关文章:

你感兴趣的文章:

标签云: