menu-icon

セッション管理にRedisを使う(Laravel 6)

以前の記事でLaravel 6でのセッション管理に、NoSQLデータベースのAmazon DynamoDBを使いました。自分は普段、Redisを使ってますので、ついでに導入手順をメモしておきます。

環境

  • Ubuntu 18.04
  • PHP 7.4

Redis Serverのインストール

導入には必要ないですが、動作検証に必要なので、ローカルに立てます。

$ sudo apt install redis

インストールできたら、サービスが動作しているか確認しておきます。

$ sudo systemctl status redis
● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-23 02:28:13 UTC; 55s ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)
 Main PID: 7686 (redis-server)
    Tasks: 4 (limit: 426)
   CGroup: /system.slice/redis-server.service
           └─7686 /usr/bin/redis-server 127.0.0.1:6379

Redis拡張のインストール

PECLでインストールします。

$ sudo pecl install redis

コマンドを実行すると、以下のようにシリアライズや圧縮に関する拡張のサポートを有効にするか聞かれます。

enable igbinary serializer support? [no] : 
enable lzf compression support? [no] : 
enable zstd compression support? [no] : 

こだわりがなければ、何も入力せずEnter連打(全てno)でも、使用に問題ありません。今回はEnter連打します。

Redis拡張をインストールできたら有効にします。以下のファイルを作成します。

/etc/php/7.4/mods-available/redis.ini
; configuration for php redis module
; priority=99
extension=redis.so

ファイルを作成したら、以下のコマンドを実行します。

$ sudo phpenmod redis
$ sudo systemctl restart php7.4-fpm

これでRedis拡張が有効になったはずです。php -m を実行して、[PHP Modules]にredisが存在することを確認してください。

Laravelの設定

.env ファイルに以下を設定します。

.env
SESSION_DRIVER=redis

ローカルのredisサーバーに接続する場合はこれだけです。redisサーバーをローカルから変更する場合は、以下を必要に応じて変更します。

.env
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

動かしてみる

動作確認方法はDynamoの記事と同じなので、画面等は省略します。Redisサーバー上のデータだけ示します。

データ保存前

データは何もありません。

127.0.0.1:6379> keys *
(empty list or set)

データ保存後

シリアライズされたデータが確認できます。

127.0.0.1:6379> keys *
1) "laravel_database_laravel_cache:Y12VGSXM2quk0JaG233FBVFv3woONGF2HN3XeFp6"
127.0.0.1:6379> get laravel_database_laravel_cache:Y12VGSXM2quk0JaG233FBVFv3woONGF2HN3XeFp6
"s:219:\"a:4:{s:6:\"_token\";s:40:\"aOt5pkkDtDj1McCGi7fzkqXTqHM5Y36DbCBx5D8o\";s:9:\"_previous\";a:1:{s:3:\"url\";s:38:\"https://dev.tdomy.com/store?sdata=hoge\";}s:6:\"_flash\";a:2:{s:3:\"old\";a:0:{}s:3:\"new\";a:0:{}}s:5:\"sdata\";s:4:\"hoge\";}\";

まとめ

Laravel6 でセッション管理にRedisを使うための手順でした。セッション以外でもキャッシュやジョブ管理にも簡単に使えるので、個人的には使用頻度高いです。