适应自动变化的Heroku Redis端点的Laravel

根据这篇文章所写,Heroku的Redis偶尔会在更新时更改主机和端口。
https://qiita.com/usagizmo/items/7c5a338e339ebffd7eba

当进行更新时,会自动更改环境变量REDIS_URL的值,但是Laravel通常会将Host和Port等分开编写,因此一旦进行更新,Redis可能会突然无法连接。

因此,让我们根据Heroku提供的REDIS_URL来调整Redis的连接方式吧!

配置的修改

首先,这是默认的Redis配置。

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],

将解析REDIS_URL的方法进行更改。

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => parse_url(env('REDIS_URL'), PHP_URL_HOST),
            'password' => parse_url(env('REDIS_URL'), PHP_URL_PASS),
            'port' => parse_url(env('REDIS_URL'), PHP_URL_PORT),
            'database' => env('REDIS_DB', 0),
        ],

        'cache' => [
            'host' => parse_url(env('REDIS_URL'), PHP_URL_HOST),
            'password' => parse_url(env('REDIS_URL'), PHP_URL_PASS),
            'port' => parse_url(env('REDIS_URL'), PHP_URL_PORT),
            'database' => env('REDIS_CACHE_DB', 1),
        ],

    ],

环境变量

在Heroku中,将分别保存为Host和Password的环境变量合并为REDIS_URL。当在Heroku上添加Redis插件时,将自动创建REDIS_URL。

在本地进行以下设置

REDIS_URL=redis://[HOST]:[PORT]

如果需要设置用户名和密码,将会是这样。

REDIS_URL=redis://[USER]:[PASSWORD]@[HOST]:[PORT]
广告
将在 10 秒后关闭
bannerAds