开发者社区> 问答> 正文

redis高并发访问读取超时

`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时会出现这个错 基本都是运行一段时间就会出现 影响程序运行

展开
收起
落地花开啦 2016-02-19 14:07:58 9496 0
3 条回答
写回答
取消 提交回答
  • 完全避免超时是不可能的, 任何服务也都不能保证100%的可用, 所以我觉得要业务上做好异常处理控制, 针对不同的业务场景选择丢弃还是重试。

    2019-07-17 18:44:39
    赞同 展开评论 打赏
  • 报超时的时候需要分析下客户端和服务端 首先检查下redis后端日志 看看有没有做aof rewrite或者rdb dump 如果有查看下fork的耗时 可以通过info命令查看到 然后排查下redis有没有慢日志 可以通过slowlog get 100查看到 然后如果服务端没有问题 则检查下客户端的负载网络等情况 看看有没有异常

    2019-07-17 18:44:39
    赞同 展开评论 打赏
  • 喜欢技术,喜欢努力的人

    应该是fork的时候占满内存了吧
    搜下redis的原理吧,有两种方式去把内存的数据写到磁盘上,写的时候会fork出一个子进程,占用redis同样大小的空间,所以如果你redis分配了5G的内存,那么写磁盘的时候会占用10G的内存

    2019-07-17 18:44:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Redis集群演化的心路历程——从2.x到3.0时代 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载