You need to enable JavaScript to run this app.
导航

为什么通过 Redission 客户端连接 Redis 时,会出现 ERR unknown command 'READONLY' 报错?

最近更新时间2023.05.30 17:08:44

首次发布时间2023.05.30 17:08:44

问题现象

当通过 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 模式

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);

方法二:将 Cluster 模式的 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);