解决Jedis链接报超时异常和connection reset异常的方法
一、链接池配置
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- ${redis.max_total:64}会优先查找是否已经配置redis.max_total的属性,如果没有配置,则为64 -->
<property name="maxTotal" value="${redis.max_total:300}" />
<property name="maxIdle" value="${redis.max_idle:8}" />
<property name="maxWaitMillis" value="${redis.max_wait_millis:30000}" />
<property name="testOnBorrow" value="true" />
<!-- whenExhaustedAction为1表示当链接池的实例用完时,阻塞,直到有可用链接资源 -->
<property name="blockWhenExhausted" value="true"></property>
</bean> <bean id="jedisSentinelPoolConfig" class="com.chinacloud.monitoring.api.util.JedisSentinelPoolConfig">
<constructor-arg index="0" value="${redis.master.name}" />
<constructor-arg index="1" value="${redis.sentinels}" />
<constructor-arg index="2" ref="jedisPoolConfig" />
</bean> <bean id="jedisHelper" class="com.chinacloud.monitoring.api.util.JedisHelper" destroy-method="destroy">
<!--对应于JedisHelper类里面的的构造函数 -->
<constructor-arg index="0" ref="jedisSentinelPoolConfig" />
</bean>
二、JedisSentinelPoolConfig类
package com.chinacloud.monitoring.api.util; import java.util.HashSet;
import java.util.Set; import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool; public class JedisSentinelPoolConfig {
//在集群中的主机maste-slave模式下
private String masterName;
private String sentinels;
private JedisPoolConfig jedisConfig; public JedisSentinelPoolConfig(String masterName, String sentinels, JedisPoolConfig jedisConfig) {
//TODO: validation
this.masterName = masterName;
this.sentinels = sentinels;
this.jedisConfig = jedisConfig; } //JedisSentinelPool支持集群的链接池
public JedisSentinelPool getJedisSentinelPool() {
String[] sentinelstrs = sentinels.split(",");
Set<String> sentinelsSet = new HashSet<String>(sentinelstrs.length);
for (String st : sentinelstrs) {
sentinelsSet.add(st);
}
//30000表示超时为30秒
return new JedisSentinelPool(masterName, sentinelsSet, jedisConfig,30000);
}
}
三、JedisHelper类
public <T> List<T> listRange(String listName, Class<T> elementClazz, long start, long end) throws IOException {
Assert.notNull(listName);
Assert.notNull(elementClazz);
Jedis jedis = null;
boolean borrowOrOprSuccess = true;
List<T> objects = new ArrayList<>();
jedis=getJedis();
try {
//同步锁解决高并发情况下的address in use异常
synchronized (this) {
if(jedis!=null){
List<String> elements = jedis.lrange(listName, start, end);
for (String element : elements) {
objects.add(objectMapper.readValue(element, elementClazz));
}
}
}
} catch (Exception e) {
borrowOrOprSuccess = false;
if (jedis != null)
jedisPool.returnBrokenResource(jedis);
} finally {
if (borrowOrOprSuccess){
jedisPool.returnResource(jedis);
}
}
return objects;
}
public Jedis getJedis()
{
int timeoutCount = 0;
while (true) { //如果第一次取不到,尝试取三次链接
try {
Jedis jedis = jedisPool.getResource();
return jedis;
} catch (Exception e) {
timeoutCount++;
if (timeoutCount > 3)
{
break;
}
}
}
return null;
}
解决Jedis链接报超时异常和connection reset异常的方法的更多相关文章
- 一次SocketException:Connection reset 异常排查
问题描述 上一期的需求上线之后,线上多了一个异常:Connection reset.如下: [2017-03-22 00:45:00 ERROR] [creativeAuditTaskSchedule ...
- 异常记录 Connection reset
连接重置Connection reset 异常java.net.SocketException: Connection reset 详细信息 java.net.SocketException: Con ...
- HttpClient遭遇Connection Reset异常,如何正确配置?
最近工作中使用的HttpClient工具遇到的Connection Reset异常.在客户端和服务端配置不对的时候容易出现问题,下面就是记录一下如何解决这个问题的过程. 出现Connection Re ...
- apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104)) 今天用apache 自带的ab工具测试,当并发量达到1000多的时 ...
- [未解决]报错:ssh_exchange_identification: read: Connection reset by peer
报错代码: ssh_exchange_identification: read: Connection reset by peer fatal: 无法读取远程仓库. 请确认您有正确的访问权限并且仓库存 ...
- [转载] apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
遇见相同的问题. https://www.cnblogs.com/felixzh/p/8295471.html -------------------------------------------- ...
- celery使用rabbitmq报错[Errno 104] Connection reset by peer.
写好celery任务文件,使用celery -A app worker --loglevel=info启动时,报告如下错误: [2019-01-29 01:19:26,680: ERROR/MainP ...
- 解决ssh链接服务器超时自动断开的问题
为了安全性:ssh默认的连接超时时间很短:经常就是发个呆就断开了:事实上是可以修改超时时间的. 示例环境: 服务器:centos6.5 1:[root@iZ28qa8jt4uZ /]cp /etc/s ...
- 最近纠结致死的一个java报错java.net.SocketException: Connection reset 终于得到解决
自从SEOTcs系统11月份24日更新了一下SEO得分算法以来,一直困扰我的一个问题出现了,java的数据job任务,在执行过程中会经常报以下的错误: “2011-12-03 18:00:32 Def ...
随机推荐
- jQuery上传插件uploadify 3.2.1
1.属性 名称 默认值 说明 swf [必须设置]swf的路径 uploader [必须设置]服务器端脚本文件路径 uploadLimit 999 最多上传文件数量 checkExisting ...
- Spring MVC @InitBinder 数据绑定 & 数据格式化 & 数据校验
1 数据绑定 2 数据格式化 修改绑定的字段等等操作 日期 - 接收表单日期字符串格式内容.,在实体类加入@DateTimeFormat 数值 原理: DefautFormattingConversi ...
- javascript中的二维数组
要创建一个二位数组我们脑子里第一个出现的就是 var arr=[][]; 但是在javascript这样是会报错的,要在javascrip中创建一个二位数组对象方法如下 方法一 直接把数组写出 ...
- web项目生成web.xml的两种方式
做了很多的项目,今天着手写个小demo发现做web项目的时候还需要从别的地方去拷贝,那么如果没有地方可以拷贝,要怎么办呢?下边介绍三种方式生成web.xml文件. 一.maven项目情况:(STS版) ...
- DP解LCS问题模板及其优化
LCS--Longest Common Subsequence,即最长公共子序列,一般使用DP来解. 常规方法: dp[i][j]表示字符串s1前i个字符组成的字符串与s2前j个字符组成的字符串的LC ...
- 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(采用 Baidu Eclipse)
3.通过 SVN 检入工程 在 bae 上的应用添加部署成功后,如图 7 点击“点击查看”按钮,会打开一个新页面,页面上会打印 “hello world” ,这是因为我们的应用包含有示 ...
- 【c++】c++中重载输出操作符,为什么要返回引用
针对:ostream & operator <<(ostream & os, const ClassType &object) 说明几点: 1.第一个形参为对ost ...
- 7-qt随机数qrand
QT生成随机数和C语言差距不大,C语言用srand()和rand(),QT是用Qsrand()和qrand(): QT生成随机数的格式是: qsrand(QTime(0,0,0).secsTo(QTi ...
- 5-Qt读取文件失败原因
刚开始准备读取当前目录下的txt文件: QFile file(":/xuhao.txt");或者: QFile file("./xuhao.txt"); 但是一 ...
- yii2中的rules 自定义验证规则详解
yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...