ホームページ  >  記事  >  バックエンド開発  >  PHP Webサイトのredisキャッシュ手法の解析_PHPチュートリアル

PHP Webサイトのredisキャッシュ手法の解析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:05:46822ブラウズ

PHP Webサイトのredisキャッシュ手法の解析

PHP Webサイトのredisキャッシュ手法の解析

作者: Wucl

時間: 2014-02-05

章の内容: 基本的な背景、分析内容、個人的な経験 (この人は非常に不道徳で、思いついたことを何でも書きます)。

1. 基本的な背景:

ページのアクセス速度を向上させ、データベースへのアクセスの負荷を軽減するため。

2. Redis キャッシュ分析:

最初に 3 つの質問をしてください:

1) Web サイト全体のミドルウェアはデータをキャッシュしますか?

2) Redis がミドルウェア データ全体をキャッシュする場合、Redis はその圧力に耐えることができますか?

3) PHP キャッシュ Redis はミドルウェアのキャッシュ方法に影響を与えますか?

現在 2 つのプランがあります:

プラン A: キャッシュ時間が短くなり、通常 120 秒以内になります。

プラン B: キャッシュ時間が長くなり、通常は 84600 秒になります。

プランA

開発の観点: キャッシュ操作は比較的頻繁に行われますが、ミドルウェア部分に負荷がかかる可能性があります。

編集の観点: データの編集後、効果が確認されるまでに最大 2 ~ 3 分かかるため、キャッシュをクリアする必要はありません。

ユーザーの観点: 10 分間の期間が使用されると仮定すると、この期間中のページ読み込みパフォーマンスは速い場合もあれば遅い場合もあります。

プランB

開発の観点: キャッシュは頻度が低いため、ミドルウェアに対する負荷の大部分を占める可能性があるため、この方法を使用することをお勧めします。

編集観点: 編集後、特定の操作を通じて以前のキャッシュをクリアする必要があります。

ユーザーの観点: ページの読み込み速度は安定していて速いです。

既存のプロジェクトに関連付けられたキャッシュ:

1) Redis が接続を確立します (長い接続を使用します):

pconnect: クラスの静的変数

プライベート静的関数 getRedisObject($ip = '127.0.0.1', $port = '6379'){

試してください{

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

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

}その他{

$redis = 新しい Redis();

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

$redis->select(1);

static::$pconnect['redis'] = $redis;

}

試してください{

$redis->ping();

}catch(RedisException $e){

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

$redis->select(1);

static::$pconnect['redis'] = $redis;

}

}catch(RedisException $e){

echo $e->getMessage().'
';

}

$redis を返す;

}

2) 主に3つの方法を適用します:

$conn->削除 ( $key )

$conn->get($key)

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

3) 例外 RedisException に注意してください

4) マスターとスレーブの同期には 1 つの操作のみが必要です:

redis.conf のslaveofを次のように変更します:

127.0.0.1 6379のスレーブ

5) マスター Redis は追加と変更に使用でき、スレーブ Redis はクエリに使用できます。リンクブロックはスリープすることで解決します。実際のプロジェクトのリンク方法は以下の通りです(パラメータについては詳しく説明しません):

プライベート関数redisConn(){

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

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

試してください{

$cacheConn->ping(); // リンクに例外がない場合は、リンク インスタンスを返します

$cacheConn を返す;

}catch(RedisException $e){}

}

$cacheConn = null;

$tryI = 0;

while ( $cacheConn == null && $tryI

試してください{

$cacheConn = 新しい Redis ();

$serverSetting = Config::$redis;

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

$this->_serverType = "デフォルト";

$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

$cacheConn->select ( $redisDB );

} 他 {

$cacheConn->select ( 0 );

}

} catch (例外 $e) {

睡眠 ( $tryI * 0.3 );

$tryI++;

$cacheConn = null;

}

}

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

$cacheConn を返す;

}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/962644.html技術記事 PHP Web サイトの Redis キャッシュ方法の分析 PHP Web サイトの Redis キャッシュ方法の分析 著者: Wucl 時間: 2014-02-05 章の内容: 基本的な背景、分析内容、個人的な経験 (この人は非常に道徳的ではありません...
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。