当通过 Redission 客户端连接缓存数据库 Redis 版实例时,出现了 ERR unknown command 'READONLY'
错误提示,具体报错信息如下图所示。
Redission 客户端在 Cluster 模式下,ReadMode
默认取值为 SLAVE
,此时 Redission 客户端会默认发送 READONLY
命令至 Redis 数据库,但缓存数据库 Redis 版当前不支持READONLY
命令。所以,当使用 Redission 客户端的 Cluster 模式连接 Redis 实例时,可能会出现 ERR unknown command 'READONLY'
报错。更多关于 Redis 支持的命令详情,请参见命令支持。
您可以参考如下任意一种方法避免出现上述报错。
Redission 客户端的 Single 模式不会使用 Cluster 相关命令(包括 READONLY
命令),可以避免出现类似 ERR unknown command 'READONLY'
的报错。
您可以参考如下代码,将 Redission 客户端设置为 Single 模式。
Config config = new Config(); // 使用 Single 模式 config.useSingleServer() // Redis 实例的访问地址 .setAddress("redis://redis-shzlxvk38vs2j****.redis.volces.com:6379") // 本文示例中使用默认账号 default 连接 Redis 数据库,因此仅需设置数据库登录密码 .setPassword("YourPassword"); RedissonClient redisson = Redisson.create(config);
ReadMode
设置为 MASTER
如业务需使用 Redission 客户端的 Cluster 模式,您可以将 ReadMode
设置为 MASTER
(即仅从主节点读取数据),设置之后,Redission 客户端将不会发送 READONLY
命令至 Redis 数据库,从而避免出现 ERR unknown command 'READONLY'
报错。
您可以参考如下代码,将 Redission 客户端 Cluster 模式下的 ReadMode
设置为 MASTER
。
Config config = new Config(); // 使用 Cluster 模式 config.useClusterServers() // 设置 ReadMode 为 MASTER .setReadMode(ReadMode.MASTER) // Redis 实例的访问地址 .addNodeAddress("redis://redis-shzlxvk38vs2j****.redis.volces.com:6379") // 本文示例中使用默认账号 default 连接 Redis 数据库,因此仅需设置数据库登录密码 .setPassword("YourPassword"); RedissonClient redisson = Redisson.create(config);