[Jedis] ERR wrong number of arguments for 'mget'

看别人写的代码是件比较痛苦的事情,更加痛苦的是别人的代码出错还要负责调试好。

关于如何迅速定位问题和调试代码,我的一点感受是:逐行认真查看错误信息,在这些信息中找自己熟悉的内容(包括文件名、方法名等),不熟悉的内容先跳过。针对这些熟悉的内容,回溯相应的代码所在行,定位错误原因。

切忌囫囵吞枣的看了一通,其实什么有效信息也没有获得,也几乎不可能就这样定位到问题。

举例:

1、定位问题

在使用jedis监听和订阅消息时报以下错误。经逐行查看错误信息,定位到斜体的三行:分析错误原因是mget调用出错,且错误代码在OnlineFriend文件的112/257行。

redis.clients.jedis.exceptions.JedisDataException: ERR wrong number of arguments for 'mget' command   
at redis.clients.jedis.Protocol.processError(Protocol.java:59)    at redis.clients.jedis.Protocol.process(Protocol.java:66)   
at redis.clients.jedis.Protocol.read(Protocol.java:131)   
at redis.clients.jedis.Connection.getIntegerReply(Connection.java:188)   
at redis.clients.jedis.Jedis.mget(Jedis.java:873)   
at  com.caffinc.OnlineFriend$MsgListener.onMessage(OnlineFriend.java:112)   
at  com.caffinc.OnlineFriend.main(OnlineFriend.java:257)

出错代码如下:List topRoles = jedis.srandmember(top_set_key, 10);
List topLevels = jedis.mget(topRoles.toArray(new String[0]));

2、检查问题

根据以上代码,分析可能原因是jedis.mget(key)方法没有获取到key值,即key为空。

直接在redis-cli中运行> srandmember top_set_key,发现top_set_key集合为空,并由此导致mget方法参数缺失。

3、问题处理

导入相应数据到redis top_set_key集合,重新运行代码后一切正常。

总结下,有两点收获:一是调试代码要逐行认真看错误信息,不可囫囵吞枣;二是具体到技术点,mget如果参数为空,会导致ERR wrong number of arguments for 'mget' 错误。

ERR wrong number of arguments for MSET” 错误表明在使用 `MSET` 命令时提供的参数数量不正确。`MSET` 命令用于一次性设置多个键值对,其语法为 `MSET key1 value1 [key2 value2 ...]`,需要至少提供一个键值对(即两个参数)。 ### 解决方案 1. **检查参数数量**:确保提供的参数数量为偶数,因为每个键都需要对应一个值。例如: ```plaintext 127.0.0.1:6379> MSET key1 value1 key2 value2 OK ``` 这里提供了两个键值对,共四个参数,命令执行成功。 2. **检查命令格式**:确认命令的格式正确,没有遗漏或多余的空格、字符等。可以参考上述示例的格式进行输入。 3. **检查客户端代码**:如果是在代码中使用 `MSET` 命令,检查代码逻辑是否正确,确保传递给 `MSET` 命令的参数数量和格式符合要求。以 Jedis 为例: ```java import redis.clients.jedis.Jedis; public class RedisMSETExample { public static void main(String[] args) { // 连接到 Redis 服务器 Jedis jedis = new Jedis("localhost", 6379); // 执行 MSET 命令 jedis.mset("key1", "value1", "key2", "value2"); // 关闭连接 jedis.close(); } } ``` 在这个 Java 示例中,确保传递给 `mset` 方法的参数数量为偶数。 ### 原因分析 该错误通常是由于以下原因导致的: - **参数数量不足**:只提供了一个键而没有对应的值,或者提供的参数数量为奇数。 - **命令格式错误**:可能在命令中包含了多余的空格、字符或标点符号,导致 Redis 无法正确解析命令。 - **客户端代码逻辑错误**:在代码中传递给 `MSET` 命令的参数数量或格式不正确。 通过以上的解决方案和原因分析,可以解决 “ERR wrong number of arguments for MSET” 错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值