使用AWS redis cluster 集群配置
最近公司需要将redis
更换为aws的,但是只有集群,记录一下遇到的问题。
按照官方文档,在config/database.php
添加了如下配置:
'clusters' => [
'default' => [
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
]
],
]
会出现如下异常:
RedisClusterException
Couldn't map cluster keyspace using any provided seed
原因是权限配置不对,但是已经在default
中添加了用户名与密码信息。
查看源码发现laravel
在实例化redis cluster
时需要的参数取值options
中,这里面缺失了用户名与密码。
[null,["tls://you host:port"],0, 0,false,null] // vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php:187
下面是完整配置
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'),
// 登录信息
'password' => [env('REDIS_USERNAME'), env('REDIS_PASSWORD')],
'timeout' => 5,
'context' => [
// 使用tls或者tcp连接
'scheme' => env('REDIS_SCHEME', 'tcp'),
]
],
//如果确认是集群,这边需要时null,否者不会实例化为集群。
'default' => env('REDIS_IS_CLUSTER', false) ? null :
[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
//如果确认是集群,这边需要时null,否者不会实例化为集群。
'cache' => env('REDIS_IS_CLUSTER', false) ? null :[
'scheme' => env('REDIS_SCHEME', 'tcp'),
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
'clusters' => [
'default' => [
[
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
]
],
'cache' => [
[
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
]
],
],
],
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: