目次
Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方
Laravelバージョン
動作確認はLaravel Framework 7.19.1で行っています
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています
LaravelでDIを使う
本記事は上記で作成したフォルダとファイルを使用します
PhpRedisのインストール
PhpRedisを介してRedisを操作します
下記リンクで環境構築した人はインストールされているはずです
LAMP+Redis環境を超短手数で構築する
インストールしていない人は下記リンクに従ってインストールしてください
phpredis インストール
設定
(1) /sample/.env修正
Redisへアクセスするための設定を書く
‥‥
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
‥‥
REDIS_HOST、REDIS_PASSWORD、REDIS_PORTを自分の環境に合ったものにしてください
vagrantのforwarded_port設定でポートを変えたりしている場合、自分の環境にあった値に変えてください
(2) /sample/config/database.php修正
.envに書いたRedis接続定義はdatabase.phpで使われています
database.phpに定義されている配列の'redis'=>'default'要素修正、'redis'=>'db2'要素追加
‥‥
'redis' => [
‥‥
        'default' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', '0'),
        ],
        'db2' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => '2',
        ],
‥‥
Redisへの接続定義を2つ作りました
(3) /sample/config/app.php修正
aliases要素内のRedisをコメントにする
‥‥
//'Redis' => Illuminate\Support\Facades\Redis::class,
‥‥
サービスクラス作成
(1) /sample/app/Services/InterfacesフォルダにRedisService.php作成
<?php
namespace App\Services\Interfaces;
interface RedisService
{
    public function __construct();
    public function setKey1($value);
    public function getKey1();
}
(2) /sample/tests/Services/ImplフォルダにRedisServiceImpl.php作成
<?php
namespace Tests\Services\Impl;
use App\Services\Interfaces\RedisService;
class RedisServiceImpl implements RedisService
{
    public function __construct()
    {
    }
    public function setKey1($value)
    {
    }
    public function getKey1()
    {
    }
}
(3) /sample/app/Services/ImplフォルダにRedisServiceImpl.php作成
<?php
namespace App\Services\Impl;
use App\Services\Interfaces\RedisService;
use Illuminate\Support\Facades\Redis;
class RedisServiceImpl implements RedisService
{
    private $redis = null;
    public function __construct()
    {
        $this->redis = Redis::connection('db2');
    }
    public function setKey1($value)
    {
        Redis::set('key1', 'default_' . $value);
        $this->redis->set('key1', 'db2_' . $value);
    }
    public function getKey1()
    {
        $default = Redis::get('key1');
        $db2 = $this->redis->get('key1');
        return [$default, $db2];
    }
}
static関数としてRedis::setのように書くと、さきほどdatabase.phpに書いたdefault接続が使われます。
他の接続を使いたい場合は、Redis::connection('db2');のように明示的に接続を取ってください
Redisクラスのメソッド名はRedisコマンド名がそのまま使えます
DI登録
(1) /sample/app/Providers/DiServiceProvider.phpに下記を追記
use App\Services\Interfaces\RedisService;
(2) /sample/app/Providers/DiServiceProvider.phpのregisterメソッドに下記を追記
app()->singleton(RedisService::class, $prefix . 'RedisServiceImpl');
DiServiceProvider.phpはLaravelでDIを使うで作成したファイルです
LaravelでDIを使うでconfig/app.phpのprovidersに登録してあります
Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpにuse文を追記
use App\Services\Interfaces\RedisService;
(2) /sample/app/Http/Controllers/SampleController.phpにredis1メソッド、redis2メソッドを追記
    public function redis1(Request $request, RedisService $redisService)
    {
        $key1Value = $request->input('key1');
        if (!is_null($key1Value)) {
            $redisService->setKey1($key1Value);
        }
        return view('sample.redis1');
    }
    public function redis2(RedisService $redisService)
    {
        $key1Value = $redisService->getKey1();
        $data = ['key1Value' => var_export($key1Value, true)];
        return view('sample.redis2', $data);
    }
(3) /sample/routes/web.phpに下記を追記
Route::get('sample/redis1', 'SampleController@redis1');
Route::get('sample/redis2', 'SampleController@redis2');
viewの作成
(1) /sample/resources/views/sample/redis1.blade.phpファイル作成
<html>
    <head>
        <title>sample</title>
    </head>
    <body>
        <form action="{{ url('sample/redis1') }}" method="get">
            <div>key1<input type="text" name="key1" value=""></div>
            <input type="submit" >
        </form>
    </body>
</html>
(2) /sample/resources/views/sample/redis2.blade.phpファイル作成
<html>
    <head>
        <title>sample</title>
    </head>
    <body>
        <div>{{$key1Value}}</div>
    </body>
</html>
動作確認1
http://localhost/laravelSample/sample/redis1

何か値を入れて送信ボタンをクリック
http://localhost/laravelSample/sample/redis2

sample/redis1で入力した値が出てくる
redisを見てみる
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
1) "laravel_database_key1"
laravel_database_という接頭辞が付いた形で保存されています
これはconfig/database.phpのredis=>options=>prefix要素で接頭辞を設定しているためです
127.0.0.1:6379[2]> select 0
OK
127.0.0.1:6379> get laravel_database_key1
"default_value1"
127.0.0.1:6379> select 2
OK
127.0.0.1:6379[2]> get laravel_database_key1
"db2_value1"
127.0.0.1:6379[2]>
redisにも値が入っていることがわかります
sessionの格納先をRedisにする
(1) /sample/.env修正
sessionの設定を書く
‥‥
# SESSION_DRIVER=file
SESSION_DRIVER=redis
SESSION_CONNECTION=db2
‥‥
SESSION_DRIVERをredisに変える。SESSION_CONNECTIONに格納先のRedis接続を指定する
動作確認2
Laravelでセッションを使う
上記記事で作成した
http://localhost/laravelSample/sample/session1
にアクセスする
redisを見てみる
127.0.0.1:6379[2]> select 2
OK
127.0.0.1:6379[2]> keys *
1) "laravel_database_laravel_cache:xxxxxxxxxxxxxxxxxxxxxx"
Redisに入っていることがわかります