我在连接从ElastiCache实例安装到EC2实例的Laravel应用程序,甚至使用来自EC2实例的redis-cli时遇到了问题。
Laravel
我尝试在database.php中使用predis的配置,如
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => -1,
'timeout' => 0
],
],
得到了“Error while reading line from the server. [tcp:server here]
”
我尝试使用相同配置的phpRedis扩展,只更改'client' => 'phpredis'
并获得错误read error on connection {"exception":"[object] (RedisException(code: 0): read error on connection at vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:69)
。
Redis cli
使用redis cli redis-cli -h host_here -p 6379 -a password_here
,我看到像host:6379>
这样的提示符,但是键入任何命令都会引发错误Error: Connection reset by peer
。
ElastiCache Redis配置
我的EC2和弹性缓存在同一个VPC中,我可以使用telnet连接到redis实例。
~$ telnet host 6379
Trying 172.31.23.113...
Connected to host.
Escape character is '^]'.
谢谢你的帮助!
发布于 2018-03-19 18:51:04
相关:通过SSL的Laravel + Redis Cache?
我在这里回答:https://stackoverflow.com/a/48876398/663058
相关详细信息如下:
由于您有集群和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
],
'ssl' => ['verify_peer' => false], // Since we dont have TLS cert to verify
]
]
解释上述情况:
'client' => 'predis'
:这指定了要使用的PHP驱动程序(predis)。'cluster' => 'redis'
:这告诉Predis假设服务器端集群。这就意味着“跟随重定向”(例如-MOVED
响应)。在使用群集运行时,节点将使用-MOVED
响应必须请求特定密钥的节点。-MOVED
异常1/n次,n是Redis集群中的节点数(它会很幸运,每隔一段时间就会询问正确的节点)
'clusters' => [...]
:指定一个节点列表,但是只设置一个“默认”并将其指向AWS‘配置端点’将允许它动态地查找任何/所有其他节点(因为您不知道节点是什么时候来的,所以不知道节点是什么时候出现的,所以推荐使用Elasticache )。'options'
:对于Laravel,可以在顶层、集群级和节点选项中指定.(在被传送到Predis之前,它们在照明中结合在一起)'parameters'
:这些“覆盖”Predis用于新连接的默认连接设置/假设。由于我们显式地将它们设置为“默认”连接,所以不使用这些连接。但是对于集群设置来说,它们是至关重要的。一个“主”节点可能会返回一个重定向(-MOVED
),除非为password
和scheme
设置了参数,否则它将假定默认值,并且到新节点的新连接将失败。发布于 2018-02-19 10:08:56
发布于 2020-02-06 07:31:33
如果您使用predis作为客户端。
然后可以在config/database.php中更改Redis连接。
'redis' => [
'client' => 'predis',
'default' => [
'scheme' => 'tls',
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
你可以在里面加上“计划”。
我使用的是Laravel5.8,然后在Laravel内部一切都很好。
但是是的,因为Redis不提供TLS连接,所以redis-cli仍然不能工作。
https://stackoverflow.com/questions/47696004
复制相似问题