Laravel + Redis + phpredis 学習メモ

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 → DB
  • file → ファイル
  • 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 でログ確認できた

コメント

タイトルとURLをコピーしました