当前位置: 首页 > 知识库问答 >
问题:

AWS 弹性缓存 Redis 无法从拉维尔连接,显示错误:池中没有可用的连接

慕乐池
2023-03-14

使用AWS Elasticache Redis集群设置Laravel 8.x缓存:

我尝试了很多我找到的配置。但都不起作用。

我尝试从Redis cli连接Elasticache Redis集群,它可以与乒乓球配合使用。

但不使用laravel:(错误:池中没有可用的连接)

这是我的配置:

'redis' => [
        'cluster' => true,
        'client' => env('REDIS_CLIENT', 'predis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'),

            // 'ssl' => ['verify_peer' => false], => have tried, it not working
            /*
            'parameters' => [ => have tried, it not working
                'scheme'   => env('REDIS_SCHEME', 'tcp'),
                'host'     => env('REDIS_HOST', 'localhost'),
                'password' => env('REDIS_PASSWORD', null),
                'port'     => env('REDIS_PORT', 6379),
                'database' => 0,
                'timeout' => 15,
            ],
            */
        ],

        '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_CACHE_DB', 0),
                    'read_write_timeout' => 30,
                ],
            ],
            'cache' => [
                [
                    'scheme'   => env('REDIS_SCHEME', 'tcp'),
                    'host' => env('REDIS_HOST', '127.0.0.1'),
                    'password' => env('REDIS_PASSWORD', null),
                    'port' => env('REDIS_PORT', 6379),
                    'database' => env('REDIS_CACHE_DB', 1),
                ]
            ],
            'options' =>[
                'cluster' =>'redis',
            ]
        ],
    ],

这是我的。环境:

CACHE_DRIVER=redis

REDIS_HOST=xxxxx.xxxxx.clustercfg.xxxxx.cache.amazonaws.com
REDIS_PASSWORD=null
REDIS_PORT=6379

顺便说一下,我连接了配置endpoint(不是主endpoint),并且在composer.json中安装了“predis/predis”。

我更改了许多在Google上找到的配置,但它不起作用。请帮忙!!

感谢阅读。

共有1个答案

岳佐
2023-03-14

解决方案:更改为使用**phpredis **它的工作原理:

  1. 在服务器中安装php redis:
sudo yum -y install php-redis
sudo systemctl restart php-fpm.service
  'redis' => [

        'client' => env('REDIS_CLIENT', 'phpredis'),
       ....
]

不知道为什么它不适用于predis。即使配置相同。

 类似资料:
  • 我正在用自动配置的Tomcat池数据源开发基于spring boot的应用程序。我必须在不同的DB模式下调用相同的Oracle存储过程(它们都有执行授权),而且我事先没有指定的用户/密码列表。但在程序调用的时候我知道凭据。我使用dataSource对象的getConnection(user,password)方法来接收连接并且工作良好。但是,如果我一个一个地调用过程三次--对于用户A,用户B,再一

  • 我使用的是弹性缓存单节点碎片redis 4.0更高版本。 我启用了在途加密,并给了redis身份验证令牌。 我用这个链接创建了一个堡垒主机 https://aws.amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/ 我可以通过以下方式连接到弹性缓存redis节点 redis cli-h hostnam

  • 我的服务器上有一个Spring启动项目。我有时会遇到“Hikari池连接不可用”错误。我想不出原因。我看起来有很多这样的问题。一些人建议关闭一些@交易。但是,在我的应用程序中,我没有使用任何@Transactional注释。以下是我的Hikari池配置: 当我检查我的卡塔琳娜。在日志文件外,我注意到活动连接数有时会增加。例如,昨天没有活动的连接。所有连接都处于空闲状态。现在池中有2个活动连接。是否

  • 使用来自DBCP的BasicDataSource,如果我们执行getConnection()并且在最后一个块中我们关闭连接,它是真的将连接返回到池还是关闭连接。我正在检查的代码片段是这样的 我正在检查BasicDataSource的源代码,并访问了这个包装类以获取连接。 委托对象的类型为java。sql。联系包装器代码调用委托的close方法,该方法将关闭集合,而不是将连接返回到池。这是DBCP的

  • 问题内容: 我只是不明白发生了什么。我的go应用程序无法连接到弹性搜索。该节点可用,已启动并正在运行。我在这里做错了什么? 这里有什么不对的地方?错误说 这是我在浏览器中命中GET请求时从弹性搜索返回的数据 } 问题答案: 当您继续在客户端中进行嗅探但群集没有可用节点时,通常会发生错误。您可以通过点击来检查集群的状态。 如果您不禁用嗅探功能,则Golang客户端将在后台运行进程,该进程每15分钟轮

  • 我是Grails新手。在DataSource.groovy中进行了一些基本配置后,我的grails应用程序无法启动。我得到以下错误 数据库radb存在。我已经核实过了 我的datasource.groovy文件供参考,如下所示