Laravel + Redis + phpredis 学習メモ
目的
Laravelでキャッシュサーバ(Redis)を使い、Cache::remember の動きを理解する。
結論
- Redisは「DBの代わり」ではなく「DBアクセスを減らすためのキャッシュ」。
- LaravelでRedisキャッシュを使うには、RedisサーバだけでなくPHP側クライアント(今回は
phpredis)も必要。 CACHE_STORE=redisにすると、Cacheの保存先がRedisになる。
1. RedisをDockerで構築
docker-compose.yml にRedisを追加した。
redis:
image: redis:7-alpine
ports:
- "6379:6379"
ポイント
image: redis:7-alpineはRedis公式イメージ(軽量版)6379:6379はホスト6379をコンテナ6379へ転送
2. Laravel側の設定
.env を以下のように設定した。
CACHE_STORE=redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_CLIENT=phpredis
CACHE_STORE とは
Laravelのキャッシュ保存先を決める設定。
database→ DBfile→ ファイルredis→ Redis
今回は redis を指定した。
3. Cache::remember で動作確認
学習用ルートで以下を実行した。
$count = Cache::remember('todos.count', 60, function (): int {
return Todo::count();
});
意味
- キーがある(hit)→ キャッシュ値を返す
- キーがない(miss)→
Todo::count()を実行して保存し、その値を返す
4. 確認結果
/cache-test を2回実行して確認した。
- 1回目:
miss - 2回目:
hit
2回目はDB計算せずRedisを再利用できていることを確認。
5. ハマった点
Class "Redis" not found エラーが出た。
原因
PHP側にphpredis拡張が入っていなかった。
(Redisコンテナはあっても、PHPの接続クライアントが無い状態)
対応
docker/php/Dockerfile に以下を追加し、再ビルドした。
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
&& pecl install redis \
&& docker-php-ext-enable redis \
&& apk del .build-deps
6. 学んだこと
- Redisサーバ構築(Docker)と、PHPクライアント導入(phpredis)は別。
CACHE_STORE=redisでLaravelキャッシュの保存先を切り替えられる。Cache::rememberは実務で使いやすいキャッシュパターン。- 確認は
miss -> hitが最も分かりやすい。
7. スキルチェック観点との対応
- ローカル構築: Redisコンテナを自作構成で起動できた
- 設定理解:
docker-compose.ymlと.envを説明できる - 利用:
Cache::rememberで実動確認できた - 保守:
docker compose logs redisでログ確認できた

コメント