jedis2.1.0的一个bug


最近在使用jedis工程中,由于一些原因,使用的仍是较低版本的jedis版本的。使用jedis时图省事,直接通过new 一个jedis的对象使用。之后出现了ArrayIndexOutOfBoundsException的错误:

具体为:

追踪源代码发现是write方法中通过递增count,向缓存字节数组中写入数据时出现的ArrayIndexOutOfBoundsException。

 public RedisOutputStream(final OutputStream out) {
        this(out, 8192);
    }
 public RedisOutputStream(final OutputStream out) {
        this(out, 8192);
    }
  private void flushBuffer() throws IOException {
        if (count > 0) {
            out.write(buf, 0, count);
            count = 0;
        }
    }

    public void write(final byte b) throws IOException {
        buf[count++] = b;
        if (count == buf.length) {
            flushBuffer();
        }
    }

在flush时的时候一旦出错,且源码并未catch,导致count不会清0,之后就会一直报越界的错误。新版本的jedis应该已经修复此错误。另外,也可以参照网上的一些jedis pool的方法,来主动catch这个错误:

public static Set<String> getSetData(String key) {
Jedis jedis = null;
try{
jedis = jedisPool.getResource();
Set<String> set = jedis.smembers(key);
return set;
}catch(Exception e){
if(jedis != null) {
jedisPool.returnBrokenResource(jedis);
}
logger.error("ERROR_Redis| getSetData Exception! key=" + key ,e);
return null;
}finally{
if(jedis != null){
jedisPool.returnResource(jedis);
jedis = null;
}
}
}
时间: 2024-10-04 12:08:45

jedis2.1.0的一个bug的相关文章

VC++6.0的一个bug

VC++6.0是一个非常老的IDE,安装经常出现问题,特别是在win7上. 4年前,我开始学习C语言,用的就是它,一直用到现在,估计它也应该寿终正寝了! 对于for循环中的变量作用域,VC++6.0有一个bug,如下: for循环头部定义了int i,而for语句之前也定义了int i for循环头部定义了int i,而for语句之后再定义int i 是有for循环头部定义了int i

Hive1.1.0中一个BUG的记录分析

CDH5.14.0使用的HIVE版本: 自建表log: +----------------------------------------------------+--+ | createtab_stmt | +----------------------------------------------------+--+ | CREATE TABLE `log`( | | `mandt` char(3), | | `zdate` char(10), | | `ztime` char(8), |

docker 1.0.0发布以及一个bug依赖apparmor_parser

6月10号docker 1.0稳定版本发布,找了台ubuntu的机器,装了下 ubuntu version:12.04 docker version:1.0.0 装docker的步骤可以看官方文档:https://docs.docker.com/installation/ubuntulinux/ 装好之后,运行docker -d尝试启动docker守护进程,报错如下: [0fcb4ed6] +job serveapi(tcp://127.0.0.1:2375) [0fcb4ed6] +job i

解决JSONCPP 0.10.2的一个Bug

最近在使用jsoncpp 0.10.2的过程中碰到一个bug,创建的数组,无法超过5个元素,测试代码如下: int j = 0; int count = 20; Json::Value root; Json::Value item; for (int i = 0; i < count; i++) { root[i] = i; j = root.size(); } 在我的实际项目中,如果数组只有1个是元素(该元素稍微有点大的JSON对象),也有可能出现这个元素的值错误的故障,超过5个肯定出错. 在

AIX6.1/11.2.0.3在有关数据库SWAP一个BUG

昨天南京到客户服务数据库的优化调整,其中新上线,经过审查alert.log当日志现在是在过去一段时间内取得,每隔几个小时的时间滞后,班会报似的内容: Thu Aug 21 09:01:26 2014 WARNING: Heavy swapping observed on system in last 5 mins. pct of memory swapped in [8.42%] pct of memory swapped out [2.16%]. Please make sure there

Java内部类this$0字段产生的一个bug

首先查看下面一段代码,我指出了问题代码的所在,读者先自己思考一下这段代码会有什么问题. 这是用clone方法完整拷贝一个二项堆(BinomialHeap)结构的代码.二项堆中包含一个内部类BinomialHeapEntry,这个内部类的对象即二项堆中的每一个结点,除了包含结点对应的关键字外,还记录父节点parent,下一个兄弟结点sibling和第一个孩子结点child三个指针.二项堆的根表通过每棵二项树根节点的sibling指针链接. cloneBinomialTree(BinomialHea

AIX6.1/11.2.0.3数据库上关于SWAP的一个BUG

昨天去南京某客户那里调优新上线的业务数据库,在查看alert.log日志时发现在过去的一段时间里,每过几个小时或间隔一段时间,就会报类似以下的内容: Thu Aug 21 09:01:26 2014 WARNING: Heavy swapping observed on system in last 5 mins. pct of memory swapped in [8.42%] pct of memory swapped out [2.16%]. Please make sure there

Win10系统菜单打不开问题的解决,难道是Win10的一个Bug ?

Win10左下角菜单打不开,好痛苦,点击右下角的时间也没反应,各种不爽,折磨了我好几天,重装又不忍心,实在费劲,一堆开发环境要安装,上网找了很多方法都不适用.今天偶然解决了,仔细想了下,难道是Win10的一个Bug? 1.问题和现象 右下角菜单点不开,下面的状态栏的右键也没有反应.时间日期也点不开,音频喇叭同样点不开....各种烦人,百度一堆都无果.... 说明:Win10是正式版,已激活:杀毒也全盘扫描过,因为电脑是开发和办公用,几乎不上其他网站,所以中毒的可能性几乎为0. 2.解决方法 晚上

Universal-Image-Loader的一个BUG

使用UIL的内置圆角图片的功能时,发现一个BUG,就是它会拉伸图片,造成图片失真.费了一下午的功夫,重写了RoundedBitmapDisplayer,总算解决这个问题. 代码如下: public class RoundedBitmapDisplayer implements BitmapDisplayer { protected final int cornerRadius; protected final int margin; public RoundedBitmapDisplayer(i