Posted at

predisを使ってページキャッシュ

自分用メモなので、いろいろ適当です。

主に以下のページを参考にしています。

How to load WordPress in a few milliseconds using Redis


前準備

srcディレクトリ以下にcomposerでpredisをインストール。

cd $src_path

composer require predis/predis


お試し用環境

portsvolumesあたりは適当に調整してください。


docker-compose.yml

version: "3.1"

services:
redis:
container_name: redis
image: redis
web-redis-sandbox:
container_name: web-redis-sandbox
image: php:apache
ports:
- 10080:80
volumes:
- ./src:/var/www/html



ページキャッシュサンプル


src/page-cache.php

<?php

use Predis\Client;

require_once "vendor/autoload.php";

$redis = new Client( [
'host' => 'redis',
// 'port' => 6379, //redisのポートを調整する場合は、ここで指定
] );
$domain = $_SERVER['HTTP_HOST'];
$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$dkey = md5( $domain );
$ukey = md5( $url );

if ( $redis->hexists( $dkey, $ukey ) ) {
echo $redis->hget( $dkey, $ukey );
echo 'this is a cache';
exit();
}

ob_start();
echo "test<br>";
$html = ob_get_contents();
ob_end_clean();
echo $html;
$redis->hset( $dkey, $ukey, $html );
$redis->expire($dkey,5);
echo 'cache is set';
exit();


参考にしたページ(How to load WordPress in a few milliseconds using Redis)でハッシュ型を使っていたので、そのままハッシュ型を使っています。少ないフィールド数で構築されたハッシュだとメモリ消費が少ないようなので、たぶんその辺が理由なのかと思います。


他のとても重要な機能として、少ないフィールド数で構築されたRedisハッシュは非常にメモリを使う量が少なく、すべてのフィールドをRedisキーの最上位レベルに刷るのと比べると一目瞭然です。(この値は設定可能です。詳細はredis.confを参考にしてください)

- ハッシュ型 - redis 2.0.3 documentation



動作確認

docker-machine利用の場合は[machine-ip]:10080/page-cache.phpにアクセスすると確認できます。利用してない場合はたぶんlocalhost:10080/page-cache.phpでアクセスできます。

1回目の表示でcache is setと表示され、2回目以降のアクセスではthis is a cache、5秒経過すると再度cache is setと表示されれば、問題なく動作しています。


参考ページ