gpt4 book ai didi

php - Laravel + Redis 通过 SSL 缓存?

转载 作者:可可西里 更新时间:2023-11-01 12:30:10 24 4
gpt4 key购买 nike

我正在尝试使用信息 https://github.com/nrk/predis 通过 predis 1.1 和 SSL 连接到 Redis ,在示例中使用以下配置:

// Named array of connection parameters:
$client = new Predis\Client([
'scheme' => 'tls',
'ssl' => ['cafile' => 'private.pem', 'verify_peer' => true],
]);

我的 Laravel 配置如下所示:

'redis' => [
'client' => 'predis',
'cluster' => env('REDIS_CLUSTER', false),

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

'options' => [
'cluster' => 'redis',
'parameters' => ['password' => env('REDIS_PASSWORD', null)],
'scheme' => 'tls',
],
],

不幸的是,我收到以下错误:

ConnectionException in AbstractConnection.php line 155:
Error while reading line from the server. [tcp://MY_REDIS_SERVER_URL:6380]

欢迎提出建议:)

最佳答案

我能够让它工作!

您需要将“方案”从“选项” 移至“默认”:

我的工作配置:

'redis' => [
'client' => 'predis',
'cluster' => env('REDIS_CLUSTER', false),

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

'options' => [
'parameters' => ['password' => env('REDIS_PASSWORD', null)],
],
],

注意:我还从 'options' 中删除了 'cluster' 选项,但我不怀疑这是决定成败的因素问题。

在我的 final-final 配置中,我将其更改为:'scheme' => env('REDIS_SCHEME', 'tcp'), 然后定义了 REDIS_SCHEME=tls 而不是在我的 env 文件中。

在启用 TLS 的情况下使用 AWS ElastiCache 进行了测试。

编辑:以上配置仅适用于单节点 redis。如果您碰巧启用了集群 TLS,那么您将需要完全不同的配置。

'redis' => [
'client' => 'predis',
'cluster' => env('REDIS_CLUSTER', false),

// Note! for single redis nodes, the default is defined here.
// keeping it here for clusters will actually prevent the cluster config
// from being used, it'll assume single node only.
//'default' => [
// ...
//],

// #pro-tip, you can use the Cluster config even for single instances!
'clusters' => [
'default' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DATABASE', 0),
],
],
'options' => [ // Clustering specific options
'cluster' => 'redis', // This tells Redis Client lib to follow redirects (from cluster)
]
],
'options' => [
'parameters' => [ // Parameters provide defaults for the Connection Factory
'password' => env('REDIS_PASSWORD', null), // Redirects need PW for the other nodes
'scheme' => env('REDIS_SCHEME', 'tcp'), // Redirects also must match scheme
],
]
]

解释以上内容:

  • 'client' => 'predis':指定要使用的 PHP 库 Redis 驱动程序 (predis)。
  • 'cluster' => 'redis':这告诉 Predis 假设服务器端集群。这只是意味着“跟随重定向”(例如 -MOVED 响应)。当与集群一起运行时,节点将使用 -MOVED 响应您必须请求特定 key 的节点。
  • 如果你没有启用 Redis 集群,Laravel 将抛出 -MOVED 异常 1/n 次,n Redis 集群中的节点数(它会幸运地每隔一段时间询问正确的节点)
  • 'clusters' => [...] :指定节点列表,但仅设置“默认”并将其指向 AWS 'Configuration endpoint'将让它动态地找到任何/所有其他节点(推荐用于 Elasticache,因为您不知道节点何时进入或进入)。
  • 'options':对于 Laravel,可以在顶层、集群级别和节点选项中指定。 (它们在传递给 Predis 之前在 Illuminate 中组合)
  • “参数”:这些“覆盖”Predis 用于新连接的默认连接设置/假设。由于我们为“默认”连接明确设置了它们,因此未使用它们。但是对于集群设置,它们是至关重要的。 “主”节点可以发回重定向 (-MOVED),除非为 passwordscheme 设置参数,否则它将采用默认值,到新节点的新连接将失败。

关于php - Laravel + Redis 通过 SSL 缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41762751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com