`public T getResult() {
T result = null;
try {
result = execute();
} catch (Exception e) {
this.shardedJedisPool.returnBrokenResource(jedis);
} finally {
if (jedis != null) { this.shardedJedisPool.returnResource(jedis);
}
}
return result;
}
`
redis中有没有什么方法能避免连接超时吗 返回null对程序影响挺大的,还有出错后已经进行了销毁,但是后面还是会出现转换错误 这个地方有时还有返回PONG和时间戳之类的数字 困惑太久了 有没有好点的解决方案 能不能不报链接超时的错误 我观察的是在get set时会出现这个错 基本都是运行一段时间就会出现 影响程序运行
完全避免超时是不可能的, 任何服务也都不能保证100%的可用, 所以我觉得要业务上做好异常处理控制, 针对不同的业务场景选择丢弃还是重试。
报超时的时候需要分析下客户端和服务端 首先检查下redis后端日志 看看有没有做aof rewrite或者rdb dump 如果有查看下fork的耗时 可以通过info命令查看到 然后排查下redis有没有慢日志 可以通过slowlog get 100查看到 然后如果服务端没有问题 则检查下客户端的负载网络等情况 看看有没有异常
应该是fork的时候占满内存了吧
搜下redis的原理吧,有两种方式去把内存的数据写到磁盘上,写的时候会fork出一个子进程,占用redis同样大小的空间,所以如果你redis分配了5G的内存,那么写磁盘的时候会占用10G的内存
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。