PHP網站redis緩衝方式分析_PHP教程

來源:互聯網
上載者:User

PHP網站redis緩衝方式分析


PHP網站redis緩衝方式分析

作者:Wucl

時間:2014-02-05

章節內容:基礎背景、分析內容、個人心得(這個人非常沒品德,想到什麼就寫什麼。)。

1. 基礎背景:

為了提高頁面訪問速度,降低訪問資料庫壓力。

2. Redis緩衝分析:

首先提出3個問題:

1)是否緩衝整個網站中介軟體的資料?

2)如果緩衝整個中介軟體的資料redis是否可以承壓?

3)PHP緩衝redis是否會對中介軟體的緩衝方式存在影響?

現有兩種預案:

A方案:緩衝時間較短,一般為120s以內,

B方案:緩衝時間較長,一般為84600s。

A方案

開發角度:快取作業比較頻繁,但可以分擔中介軟體部分的壓力。

編輯角度:編輯資料後至多2-3分鐘看到效果,因此可以不用通過操作清除緩衝。

使用者角度:假設以10分鐘為一個時間段,那麼在這個時間段裡面頁面載入表現為時快時慢。

B方案

開發角度:緩衝不頻繁,可以分擔中介軟體很大部分的壓力,建議用這個方式。

編輯角度:編輯後必須通過特定的操作清除以前的緩衝。

使用者角度:頁面載入速度穩定且較快。

緩衝與現有項目關聯:

1) Redis建立串連(使用長串連):

pconnect: 類的靜態變數

private static function getRedisObject($ip = '127.0.0.1', $port = '6379'){

try{

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

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

}else{

$redis = new Redis();

$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().'
';

}

return $redis;

}

2) 主要應用3個method:

$conn->delete ( $key )

$conn->get($key)

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

3) 注意異常RedisException

4) 主從同步只要做一個操作:

從redis.conf修改slaveof類似為:

slaveof 127.0.0.1 6379

5) 可以master redis做添加、修改,slave redis做查詢。連結阻塞以sleep解決,下列是實際項目的連結方式(參數不多做解釋):

private function redisConn(){

if(!empty(static::$memInstance['redis'] ) && static::$memInstance['redis'] instanceof Redis) {

$cacheConn = static::$memInstance['redis'];

try{

$cacheConn->ping(); //連結未出異常,則返回連結執行個體

return $cacheConn;

}catch(\RedisException $e){}

}

$cacheConn = null;

$tryI = 0;

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

try {

$cacheConn = new Redis ();

$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;

}

http://www.bkjia.com/PHPjc/962644.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/962644.htmlTechArticlePHP網站redis緩衝方式分析 PHP網站redis緩衝方式分析 作者:Wucl 時間:2014-02-05 章節內容:基礎背景、分析內容、個人心得(這個人非常沒品德...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.