解决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 ...
随机推荐
- VBA 使用区域和当前区域
VBA 选择使用区域 Sub Select_UsedRange() ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.UsedRange). ...
- overflow: auto 图片自适应调整
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SAP PP中关于工单报工的小解
一般来说工单确认的方法很多,这里就简要介绍下几种常见的报工方法: 1.co11n 是大家常用的方法之一,也是比较好用,产量,报废,返工,工时,货物移动都可以输入.介于我们公司的业务我们用这个报工是最多 ...
- python os模块常用命令
python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令 1. os.name()——判断现在正在实用的平台,Window ...
- Haskell语言学习笔记(44)Lens(2)
自定义 Lens 和 Isos -- Some of the examples in this chapter require a few GHC extensions: -- TemplateHas ...
- homewor
<jsp;include>动作和指令的区别: 一:执行时间上: <%@ include file=”relativeURI”%> 是在翻译阶 ...
- ArcGIS模型构建器案例学习-批量删除空要素类地理模型
ArcGIS模型构建器案例学习笔记-批量删除空要素类地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:批量删除记录个数为0的矢量文件 优点:逻辑清晰,不 ...
- Containerpilot 配置文件 之 Telemetry
如果提供telemetry选项,ContainerPilot将公开可用于刮擦性能telemetry的Prometheus HTTP客户端界面. telemetry接口被公告为consul服务. tel ...
- C语言实现大数四则运算
一.简介 众所周知,C语言中INT类型是有限制,不能进行超过其范围的运算,而如果采用float类型进行运算,由于float在内存中特殊的存储形式,又失去了计算的进度.要解决整个问题,一种解决方法是通过 ...
- 2014年可用的TRACKER服务器大全
udp://tracker.openbittorrent.com:80/announceudp://tracker.publicbt.com:80/announcehttp://pubt.net:27 ...