zoukankan      html  css  js  c++  java
  • redis异常Redis:java.util.NoSuchElementException: Unable to validate object at

    前两天项目上线的时候遇到了redis的一个问题,在测试环境的时候项目运行正常,项目一上线redis便开始抛异常。

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at
    Caused by: java.util.NoSuchElementException: Unable to validate object at


    看日志发现是池的连接不够,但是项目的调用量完全在预算之内。网上说有RDB持久化的问题,也有说是配置了 redisTestOnBorrow导致检查的时候连接不通过。但是经过排查都不是。后来去业务代码中去寻找问题、
    发现这段代码public boolean remove(final String key) { try {
        final byte[] rawKey = SerializerUtil.rawKey(key);
    if (!this.containsKey(key)) {
    return true;
    }
    Long size = (Long) this.redisTemplate.execute(
    new RedisCallback<Object> () {
    public Object doInRedis(RedisConnection connection) {
    connection.select(chooseDb(key));
    Long size = connection.del(rawKey);
    return size;
    }
    }, true);
    return size > 0 ? true : false;
    } catch (Exception e) {
    LOGGER.error(ERROR_MESSAGE, e);
    throw new CacheException(ServiceConstants.SERVICE_SYSTEM_FALIURE, e);
    }
    }
    请看标红处,每次都会选择到对应的redis库,因为测试环境的redis数据库是单机的,线上的事分布式的数据库,而且我们是Twemproxy,用一致性Hash算法,所以每次切数据库去找的时候就会找不到连接
    这里把问题记录下来,大家以后在排查问题的时候一定要把异常与业务相结合,这样才能找到自己的真正问题。



  • 相关阅读:
    amuse ui(web插件,js插件,css样式)?
    解决ajax重复提交问题?
    AJAX防重复提交的办法总结?
    iOS中发送HTTP请求的方案
    巧用Xode中的代码块(转)
    SVProgressHUD进度条蒙版
    NSTimer scheduledTimerWithTimeInterval与timerWithTimeInterval、initWithFireDate的区别
    小结RunLoop
    初学RunLoop
    CocoaPods安装及使用详情
  • 原文地址:https://www.cnblogs.com/technologykai/p/8650349.html
Copyright © 2011-2022 走看看