redis异常Redis:java.util.NoSuchElementException: Unable to validate object at

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

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算法,因此每次切数据库去找的时候就会找不到链接
这里把问题记录下来,你们之后在排查问题的时候必定要把异常与业务相结合,这样才能找到本身的真正问题。
相关文章
相关标签/搜索