@Bean
fun redisConnectionFactory(): LettuceConnectionFactory {
val redisConfiguration = RedisClusterConfiguration().apply {
val (host, port, username, password) = redisProperties
addClusterNode(RedisNode(host, port))
this.username = username
this.password = RedisPassword.of(password)
}
val lettuceClientConfiguration = LettuceClientConfiguration.builder().useSsl().build()
return LettuceConnectionFactory(redisConfiguration, lettuceClientConfiguration)
}
@Bean
fun redisCommands(): RedisModulesCommands<String, String> {
val (host, port, username, password) = redisProperties
val redisUri = RedisURI.builder()
.withHost(host)
.withPort(port)
.withAuthentication(username, password.toCharArray())
.withSsl(true)
.build()
val redisModulesClient = RedisModulesClusterClient.builder(redisUri)
.build()
val connect = redisModulesClient.connect()
return connect.sync()
}
@Bean
fun configureRedisAction() = ConfigureRedisAction.NO_OP
当我应用与 AWS ElastiCache 的连接时(设置访问 Stirng 是
on ~* -@all +@read +@write
)。
我看到这个错误日志。
Caused by: io.lettuce.core.RedisCommandExecutionException: NOPERM this user has no permissions to run the 'cluster|nodes' command
但我只是只使用redis命令
jsonGet
和jsonSet
不是cluster|nodes
.
我该如何解决这个问题..?请回答我的问题。
我设置了 LettuceConnectionFactory 和 RedisModulesCommands
在将客户端配置为连接到启用集群模式的部署时,客户端使用
CLUSTER NODES
命令发现集群中的所有节点并连接到它们。
因此,您需要为要连接的用户启用
CLUSTER NODES
命令。
您可以使用 ModifyUser 操作修改用户的访问字符串。例如,使用 AWS CLI:
aws elasticache modify-user --region $REGION --user-id $USER_ID --access-string "on ~* -@all +@read +@write +cluster|nodes"
并不是说更改会在下一个维护窗口中生效。为确保立即应用更改,您可以调用 ModifyReplicationGroup 操作并将
ApplyImmediately
设置为 `true。例如,使用 AWS CLI:
aws elasticache modify-replication-group --region us-east-1 --replication-group-id $REPLICATION_GROUP_ID --apply-immediately
相关文档: