我正在尝试在 database.php
中设置单个 Redis 配置,以涵盖我在 Laravel (5.8) 中的本地和生产(Redis 集群)环境。
此配置适用于我的本地 (APP_ENV=local
) Redis 实例:
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
这适用于我的产品 (APP_ENV=production
) Redis 集群:
'redis' => [
'client' => 'predis',
'options' => [
'cluster' => 'redis',
],
'clusters' => [
'default' => [
[
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
],
],
我想设置一个配置,以便在设置 APP_ENV=local
时使用我的本地 Redis 实例并设置 APP_ENV=production
使用我的 Redis 集群。
我在我的 APP_ENV=production
环境中尝试了以下操作(REDIS_CLUSTER
设置为 true):
'redis' => [
'client' => 'predis',
'cluster' => env('REDIS_CLUSTER', false),
'options' => [
'cluster' => 'redis',
],
'clusters' => [
'default' => [
[
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
],
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
但这失败了 MOVED错误。
我在 laracasts.com/discuss 上发布了一个问题但这让我更加困惑,因为它似乎建议我更新我的应用程序代码(而不是 database.php
中的 Redis 配置)以适应这两种环境。我觉得我在配置应该如何工作方面遗漏了一些明显的东西。
最佳答案
不确定这是实现此目的的最佳(或正确)方法,但我最终将以下逻辑放在了我的 database.php
文件的顶部:
<?php
if (env('APP_ENV') == 'production') {
$redis = [
'client' => 'predis',
'options' => [
'cluster' => 'redis',
],
'clusters' => [
'default' => [
[
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
],
];
}
else {
$redis = [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
];
}
return [
....
并为我的 redis
键使用以下内容:
'redis' => $redis
所以我的生产环境使用的是Redis集群配置,我的本地使用的是本地配置。
如果有人知道为什么上面有更好的方法
关于php - 在 Laravel 中用于本地和生产的单个 Redis 配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56902656/