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

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

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

举例:

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' 错误。

[Jedis] ERR wrong number of arguments for 'mget'的更多相关文章

  1. redis cluster 的ERR max number of clients reached 问题排查

    早上发现微服务连不上redis cluster了,看来下日志如下 [root@win-jrh378d7scu 7005]# bin/redis-cli -c -h 15.31.213.183 -p 7 ...

  2. wrong number of arguments,java方法反射时数组参数的坑

    java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数. 两个数组不是一个意思啊. 我们应该把数组转为objet,这样才表示一个参数. import j ...

  3. Error Code: 1318. Incorrect number of arguments for PROCEDURE company.new_procedure; expected 2, got

    1.错误叙述性说明 20:27:34 call new_procedure(20150112) Error Code: 1318. Incorrect number of arguments for ...

  4. Error Code: 1318. Incorrect number of arguments for PROCEDURE student.new_procedure; expected 0, got

    1.错误描述 13:58:20 call new_procedure('2000','zhangsan') Error Code: 1318. Incorrect number of argument ...

  5. Variable number of arguments (Varargs)

    A parameter of a function (normally the last one) may be marked with vararg modifier: fun <T> ...

  6. hbase ERROR: wrong number of arguments (3 for 4)

    hbase(main):036:0> get 'ddl', 'example', 'info:age'COLUMN                                         ...

  7. 反射报错java.lang.IllegalArgumentException: wrong number of arguments

    class Person{ private String name ; private String sex ; public Person(){ System.out.println("c ...

  8. [nginx]invalid number of arguments

    invalid number of arguments nginx出现以下的错误,基本上错误的原因就是少了后面的分号导致. invalid number of arguments

  9. Lua 变长参数(variable number of arguments)

    lua变长参数 function add ( ... ) for i, v in ipairs{...} do print(i, ' ', v) end end add(1, 2, 'sdf') lu ...

随机推荐

  1. 『TensorFlow』第十一弹_队列&多线程&TFRecod文件_我辈当高歌

    TF数据读取队列机制详解 一.TFR文件多线程队列读写操作 TFRecod文件写入操作 import tensorflow as tf def _int64_feature(value): # val ...

  2. hdu-2865-polya+dp+矩阵+euler函数

    Birthday Toy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  3. 函数使用七:AUTHORITY_CHECK_RFC

    此函数是用来检查用户使用RFC函数的权限 感觉是个废物,从来没遇到过这么蛋疼的权限设置,以及这么挫的检查... Import USERID                      执行RFC函数的用 ...

  4. WDA基础四:Select-option的使用

    select option是方便用户和数据处理的,就是丑了点... 前面使用的input直接做查询条件有哥弊端,就是查询的时候需要判断字段是否有选择条件,然后要将选择条件做成range table.. ...

  5. Jaxb 完全手册

    Jaxb是JavaEE的规范.全称Java Architecture for XML Binding. 可以根据XML Schema产生Java类的技术.JAXB也提供了将XML实例文档反向生成Jav ...

  6. vmplayer桥接以及nat配置nginx

    1.环境 centos6.4 vm player nginx1.8 2.虚拟机的防火墙 参考http://blog.csdn.net/qilovehua/article/details/4550713 ...

  7. [luogu P3628] [APIO2010]特别行动队

    [luogu P3628] [APIO2010]特别行动队 题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特 ...

  8. 详谈Oracle12c新特点容器数据库&amp;可插拔数据库(CDB&amp;PDB)

    一般信息 数据字典 CDB_FILE$ DBA_PDBS PDB$SEED CDB_LOCAL_ADMINAUTH$ DBA_PDB_HISTORY PDB_HISTORY$ CDB_PDB_SAVE ...

  9. Linux tar压缩命令 排除某个目录 (根据man tar 总结)

    一般直接用tar命令打包很简单,直接使用 tar -zcvf test.tar.gz test 即可. 在很多时候,我们要对某一个目录打包,而这个目录下有几十个子目录和子文件,我们需要在打包的时候排除 ...

  10. Spring事务的开启方式

    1.通过注解方式@Transactional @Transactional(rollbackForClassName = { "Exception", "RuntimeE ...