• 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算法,所以每次切数据库去找的时候就会找不到连接
    这里把问题记录下来,大家以后在排查问题的时候一定要把异常与业务相结合,这样才能找到自己的真正问题。



  • 相关阅读:
    八. 输入输出(IO)操作2.面向字符的输入流
    八. 输入输出(IO)操作1.输入输出基本概念
    七. 多线程编程11.线程的挂起、恢复和终止
    七. 多线程编程10.线程死锁
    nginx 配置身份验证 http_auth_basic_module
    liunx mysql 备份
    8080 端口只允许内网访问配置
    nginx 配置白名单
    liunx tomcat 运行模式apr
    liunx contos 7.4 安装redis集群
  • 原文地址:https://www.cnblogs.com/technologykai/p/8650349.html
Copyright © 2020-2023  润新知