はじめに
インプルの矢島です。
今回はLaravel10でsessionの保存先をRedisにしてみようと思います。
Laravelではデフォルトでは、sessionはstorage/framework/sessionsの中にfileとして保存されます。
しかし、デフォルトの状態のままでは良いことばかりではなく、session情報を外に出した方がよいこともあります。
例えば、sessionでログイン情報を管理しているとします。AWSのAutoScalingを設定していて、スケールインが行われていたとします。その失われたサーバーで保持していた認証情報はなくなるので、ログイン状態ではなくなります。
そもそも複数サーバーで運用している場合は、認証情報を持っているサーバーと持っていないサーバーが存在すると、サーバー1で認証して、サーバー2にアクセスすると認証されていないような状態も引き起こされると思います。
このようなケースが想定されるので、redisを使ってsession情報を外で管理する方法をまとめました。
Redisとは
Redisとは、Key-Valueでデータを保持するNoSQL型のデータベースです。
非常に高速にデータへアクセスすることがで可能です。
今回はSessionのストレージとして使用しますが、リレーションデータベースのキャッシュとしても使用することが多いです。
やること
- centosの仮想環境にredisをインストール
- laravelのsession管理をredisに変更する
- 動作確認する
前提
以前構築した、virtualBox + Vagrant + centosで構築したLaravel 10の環境を利用します。
Redisをインストール
virtualboxの仮想環境にsshで接続して以下コマンドを実行します。
インストールして、Redisを実行します。
sudo yum install redis
sudo systemctl start redis
sudo systemctl enable redis
インストールが完了しているかを確認します。
以下コマンドを実行して、redisのバージョンが表示されればインストール完了です。
[vagrant@localhost ~]$ redis-server --version
> Redis server v=3.2.12 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=7897e7d0e13773
簡単に動作確認してみます。redis-cliで値をセットしたり取得したり削除してみます。
Laravelのセッション管理をRedisに変更する
composerでredisを扱うためのパッケージをインストールします。
composer require predis/predis
.envの内容を変更します。
SESSION_DRIVERをデフォルトのfileからredisに変更します。
REDIS_HOSTとREDIS_PORTの設定はlocalなのでデフォルトのままにします。
SESSION_DRIVER=redis
動作確認する
Breezeでログイン情報をsession管理しているので、ログインしてから、redis-cliでRedisの中身を確認してみます。
無事それっぽいkeyが入っていることを確認しました。
他にも毎度お馴染みの以下のようなsessionを格納するコードを活用しても、無事に格納されていることを確認できます!
Session::put('test', 'success');