关于jedis2.4以上版本的连接池配置,及工具类
jedis.propertise 注意以前版本的maxAcitve和maxWait有所改变,JVM根据系统环境变量ServerType中的值 取不同的配置,实现多环境(测试环境、生产环境)集成。
redis.pool.maxTotal=redis.pool.maxActive.${ServerType}
redis.pool.maxIdle=redis.pool.maxIdle.${ServerType}
redis.pool.maxWaitMillis=redis.pool.maxWait.${ServerType}
redis.pool.minIdle=redis.pool.minIdle.${ServerType}
redis.host=redis.host.${ServerType}
redis.port=redis.port.${ServerType}
redis.password=redis.password.${ServerType}
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true
redis.timeout=1000
#C
#REL
redis.pool.maxActive.REL=200
redis.pool.maxIdle.REL=50
redis.pool.minIdle.REL=10
redis.pool.maxWait.REL=300
redis.host.REL=192.168.0.201
redis.port.REL=8989
redis.password.REL=beidou123 #VRF
redis.pool.maxActive.VRF=200
redis.pool.maxIdle.VRF=50
redis.pool.minIdle.VRF=10
redis.pool.maxWait.VRF=300
redis.host.VRF=192.168.0.201
redis.port.VRF=8989
redis.password.VRF=beidou123
config的包装便于后面xml的注入
/**
* redis连接池配置文件包装类
*
* @author daxiong
* date: 2017/03/07 11:51
*/
public class GenericObjectPoolConfigWrapper extends GenericObjectPoolConfig { public GenericObjectPoolConfig getConfig() {
return this;
} }
spring配置
<!--redis连接池配置-->
<context:property-placeholder location="classpath:jedis.properties" ignore-unresolvable="true"/>
<bean id="jedisPoolConfig" class="smm.mvc.CacheDb.GenericObjectPoolConfigWrapper">
<!--最大连接数-->
<property name="maxTotal" value="${${redis.pool.maxTotal}}" />
<!--最大空闲连接数-->
<property name="maxIdle" value="${${redis.pool.maxIdle}}" />
<!--初始化连接数-->
<property name="minIdle" value="${${redis.pool.minIdle}}"/>
<!--最大等待时间-->
<property name="maxWaitMillis" value="${${redis.pool.maxWaitMillis}}" />
<!--对拿到的connection进行validateObject校验-->
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
<!--在进行returnObject对返回的connection进行validateObject校验-->
<property name="testOnReturn" value="${redis.pool.testOnReturn}" />
<!--定时对线程池中空闲的链接进行validateObject校验-->
<property name="testWhileIdle" value="true" />
</bean> <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
<constructor-arg index="0">
<bean factory-bean="jedisPoolConfig" factory-method="getConfig"/>
</constructor-arg>
<constructor-arg index="1" value="${${redis.host}}"/>
<constructor-arg index="2" value="${${redis.port}}"/>
<!--timeout-->
<constructor-arg index="3" value="${redis.timeout}"/>
<constructor-arg index="4" value="${${redis.password}}"/>
</bean>
jedis工具类
ublic abstract class JCacheTools {
public abstract int getDBIndex();
/**
* 默认日志打印logger_default
*/
public static Logger logger_default = Logger.getLogger("logger_jCache_default");
/**
* 失败日志logger,用于定期del指定的key
*/
public static Logger logger_failure = Logger.getLogger("logger_jCache_failure"); @Resource
protected JedisPool jedisPool; protected Jedis getJedis() throws JedisException {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
} catch (JedisException e) {
LogContext.instance().warn(logger_failure, "failed:jedisPool getResource.", e);
if(jedis!=null){
jedisPool.returnBrokenResource(jedis);
}
throw e;
}
return jedis;
} protected void release(Jedis jedis, boolean isBroken) {
if (jedis != null) {
if (isBroken) {
jedisPool.returnBrokenResource(jedis);
} else {
jedisPool.returnResource(jedis);
}
}
} protected String addStringToJedis(String key, String value, int cacheSeconds, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
String lastVal = null;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
lastVal = jedis.getSet(key, value);
if(cacheSeconds!=0){
jedis.expire(key,cacheSeconds);
}
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, value);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, value, e);
} finally {
release(jedis, isBroken);
}
return lastVal;
} protected void addStringToJedis(Map<String,String> batchData, int cacheSeconds, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
Pipeline pipeline = jedis.pipelined();
for(Map.Entry<String,String> element:batchData.entrySet()){
if(cacheSeconds!=0){
pipeline.setex(element.getKey(),cacheSeconds,element.getValue());
}else{
pipeline.set(element.getKey(),element.getValue());
}
}
pipeline.sync();
LogContext.instance().debug(logger_default, "succeed:" + methodName,batchData.size());
} catch (Exception e) {
isBroken = true;
e.printStackTrace();
} finally {
release(jedis, isBroken);
}
} protected void addListToJedis(String key, List<String> list, int cacheSeconds, String methodName) {
if (list != null && list.size() > 0) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
if (jedis.exists(key)) {
jedis.del(key);
}
for (String aList : list) {
jedis.rpush(key, aList);
}
if(cacheSeconds!=0){
jedis.expire(key, cacheSeconds);
}
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, list.size());
} catch (JedisException e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, list.size(), e);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, list.size(), e);
} finally {
release(jedis, isBroken);
}
}
} protected void addToSetJedis(String key, String[] value, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
jedis.sadd(key,value);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, value);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, value, e);
} finally {
release(jedis, isBroken);
}
} protected void removeSetJedis(String key,String value, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
jedis.srem(key,value);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, value);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, value, e);
} finally {
release(jedis, isBroken);
}
} protected void pushDataToListJedis(String key, String data, int cacheSeconds, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
jedis.rpush(key, data);
if(cacheSeconds!=0){
jedis.expire(key,cacheSeconds);
}
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, data);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, data, e);
} finally {
release(jedis, isBroken);
}
}
protected void pushDataToListJedis(String key,List<String> batchData, int cacheSeconds, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
jedis.del(key);
jedis.lpush(key,batchData.toArray(new String[batchData.size()]));
if(cacheSeconds!=0)
jedis.expire(key,cacheSeconds);
LogContext.instance().debug(logger_default, "succeed:" + methodName,batchData!=null?batchData.size():0);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, batchData!=null?batchData.size():0, e);
} finally {
release(jedis, isBroken);
}
} /**
* 删除list中的元素
* @param key
* @param values
* @param methodName
*/
protected void deleteDataFromListJedis(String key,List<String> values, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
Pipeline pipeline = jedis.pipelined();
if(values!=null && !values.isEmpty()){
for (String val:values){
pipeline.lrem(key,0,val);
}
}
pipeline.sync();
LogContext.instance().debug(logger_default, "succeed:" + methodName,values!=null?values.size():0);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, values!=null?values.size():0, e);
} finally {
release(jedis, isBroken);
}
} protected void addHashMapToJedis(String key, Map<String, String> map, int cacheSeconds, boolean isModified, String methodName) {
boolean isBroken = false;
Jedis jedis = null;
if (map != null && map.size() > 0) {
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
jedis.hmset(key, map);
if (cacheSeconds >= 0)
jedis.expire(key, cacheSeconds);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, map.size());
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, map.size(), e);
} finally {
release(jedis, isBroken);
}
}
} protected void addHashMapToJedis(String key, String field, String value, int cacheSeconds, String methodName) {
boolean isBroken = false;
Jedis jedis = null;
try {
jedis = this.getJedis();
if (jedis != null) {
jedis.select(getDBIndex());
jedis.hset(key, field, value);
jedis.expire(key, cacheSeconds);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, field, value);
}
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, field, value, e);
}finally {
release(jedis, isBroken);
}
} protected void updateHashMapToJedis(String key, String incrementField, long incrementValue, String dateField, String dateValue, String methodName) {
boolean isBroken = false;
Jedis jedis = null;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
jedis.hincrBy(key, incrementField, incrementValue);
jedis.hset(key, dateField, dateValue);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, incrementField, incrementValue);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, incrementField, incrementValue, e);
}finally {
release(jedis, isBroken);
}
} public String getStringFromJedis(String key, String methodName) {
String value = null;
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
if (jedis.exists(key)) {
value = jedis.get(key);
value = StringUtils.isNotBlank(value) && !"nil".equalsIgnoreCase(value)?value:null;
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, value);
}
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, value, e);
} finally {
release(jedis, isBroken);
}
return value;
} public List<String> getStringFromJedis(String[] keys, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
return jedis.mget(keys);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, Arrays.toString(keys), e);
} finally {
release(jedis, isBroken);
}
return null;
} protected List<String> getListFromJedis(String key, String methodName) throws JMSCacheException {
List<String> list = null;
boolean isBroken = false;
Jedis jedis = null;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
if (jedis.exists(key)) {
list = jedis.lrange(key, 0, -1);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, list != null ? list.size() : 0);
}
} catch (JedisException e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, list != null ? list.size() : 0, e);
} finally {
release(jedis, isBroken);
}
return list;
} protected Set<String> getSetFromJedis(String key, String methodName) throws JMSCacheException {
Set<String> list = null;
boolean isBroken = false;
Jedis jedis = null;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
if (jedis.exists(key)) {
list = jedis.smembers(key);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, list != null ? list.size() : 0);
}
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, list != null ? list.size() : 0, e);
} finally {
release(jedis, isBroken);
}
return list;
} protected Map<String, String> getHashMapFromJedis(String key, String methodName) {
Map<String, String> hashMap = null;
boolean isBroken = false;
Jedis jedis = null;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
hashMap = jedis.hgetAll(key);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, hashMap != null ? hashMap.size() : 0);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, hashMap != null ? hashMap.size() : 0, e);
} finally {
release(jedis, isBroken);
}
return hashMap;
} protected String getHashMapValueFromJedis(String key, String field, String methodName) {
String value = null;
boolean isBroken = false;
Jedis jedis = null;
try {
jedis = this.getJedis();
if (jedis != null) {
jedis.select(getDBIndex());
if (jedis.exists(key)) {
value = jedis.hget(key, field);
LogContext.instance().debug(logger_default, "succeed:" + methodName, key, field, value);
}
}
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, key, field, value, e);
} finally {
release(jedis, isBroken);
}
return value;
} public Long getIdentifyId(String identifyName ,String methodName) {
boolean isBroken = false;
Jedis jedis = null;
Long identify=null;
try {
jedis = this.getJedis();
if (jedis != null) {
jedis.select(getDBIndex());
identify = jedis.incr(identifyName);
if(identify==0){
return jedis.incr(identifyName);
}else {
return identify;
}
}
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:" + methodName, identifyName, "", identify, e);
} finally {
release(jedis, isBroken);
}
return null;
} /**
* 删除某db的某个key值
* @param key
* @return
*/
public Long delKeyFromJedis(String key) {
boolean isBroken = false;
Jedis jedis = null;
long result = 0;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
LogContext.instance().debug(logger_default, "succeed:delKeyFromJedis");
return jedis.del(key);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:delKeyFromJedis", e);
} finally {
release(jedis, isBroken);
}
return result;
} /**
* 根据dbIndex flushDB每个shard
*
* @param dbIndex
*/
public void flushDBFromJedis(int dbIndex) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(dbIndex);
jedis.flushDB();
LogContext.instance().debug(logger_default, "succeed:flushDBFromJedis");
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:flushDBFromJedis", e);
} finally {
release(jedis, isBroken);
}
} public boolean existKey(String key, String methodName) {
Jedis jedis = null;
boolean isBroken = false;
try {
jedis = this.getJedis();
jedis.select(getDBIndex());
LogContext.instance().debug(logger_default, "succeed:"+methodName);
return jedis.exists(key);
} catch (Exception e) {
isBroken = true;
LogContext.instance().warn(logger_failure, "failed:"+methodName, e);
} finally {
release(jedis, isBroken);
}
return false;
} }
关于jedis2.4以上版本的连接池配置,及工具类的更多相关文章
- 【知了堂学习心得】浅谈c3p0连接池和dbutils工具类的使用
1. C3P0概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. 2. C3P ...
- mysql连接池的使用工具类代码示例
mysql连接池代码工具示例(scala): import java.sql.{Connection,PreparedStatement,ResultSet} import org.apache.co ...
- [JavaEE] Hibernate连接池配置测试
转载自51CTO http://developer.51cto.com/art/200906/129914.htm Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以 ...
- hibernate+mysql的连接池配置
1:连接池的必知概念 首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...
- Java Mysql连接池配置和案例分析--超时异常和处理
前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...
- c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包
[-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...
- web 连接池配置
TOMCAT J2EE项目连接池配置 web 项目的 web.xml <web-app> <resource-ref> <description>DB Connec ...
- 6.13-C3p0连接池配置,DBUtils使用
DBCP连接池 一.C3p0连接池配置 开源的JDBC连接池 使用连接池的好处: 减轻数据库服务器压力 数据源: ComboPooledDataSource ComboPooledDataSource ...
- 06-spring常见的连接池配置
1 准备工作 首先,我们准备jdbc属性文件 database.properties,用于保存连接数据库的信息,利于我们在配置文件中使用. 只要在applicationContext.xml(Spri ...
随机推荐
- M-JPEG、MPEG4、H.264都有何区别
压缩方式是网络视频服务器和网络摄像机的核心技术,压缩方式很大程度上决定着图像的质量.压缩比.传输效率.传输速度等性能,它是评价网络视频服务器和网络摄像机性能优劣的重要一环.随着多媒体技术的发展,相继推 ...
- opencv 图像处理函数大全
.cvLoadImage:将图像文件加载至内存: .cvNamedWindow:在屏幕上创建一个窗口: .cvShowImage:在一个已创建好的窗口中显示图像: .cvWaitKey:使程序暂停,等 ...
- Docker删除镜像报错
问题描述: 笔者意图删除nginx-file的镜像文件,但通过命令删除镜像时出现报错信息,提示存在多个引用(即一个IMAGE可被多个REPOSITORY引用,故删除会出现失败),如下: [root@k ...
- 【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档
本章介绍如何使用NGINX Plus和NGINX开放源代理和负载平衡TCP和UDP流量. 目录 介绍 先决条件 配置反向代理 配置TCP或UDP负载平衡被动健康监控 选择负载平衡方法 配置会话持久性 ...
- VBS 重启 TP-Link 路由器
分享一个自己用的小工具,重启TP-Link路由器的,好像还是大学时候写的,献丑了. 其他路由器可能有些不同,但是思路都是差不多的. user = "admin" '路由器帐号 pa ...
- [整理]SQL Server Reporting Services Charts
http://msdn.microsoft.com/zh-cn/library/aa964128.aspx#mainSectionhttp://msdn.microsoft.com/en-us/lib ...
- HDU 1717 小数化分数2 数学题
解题报告:输入一个小于1的小数,让你把这个数转化成分数,但注意,输入的数据还有无限循环的小数,循环节用一对括号包含起来. 之前还没有写过小数转分数的题,当然如果没有循环小数的话,应该比较简单,但是这题 ...
- HDU 2102 A计划 (深搜)
题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...
- 数位DP入门(A - 不要62 HDU - 2089 &&B - Bomb HDU - 3555 )
题目链接:https://cn.vjudge.net/contest/278036#problem/A 具体思路:对于给定的数,我们按照位数进行运算,枚举每一位上可能的数,在枚举的时候需要注意几个条件 ...
- C - A Plug for UNIX (又是建图坑)
题目链接:https://cn.vjudge.net/contest/68128#problem/C 没理解好题意真的麻烦,一上午就这么过去了..... 具体思路:按照 源点 ->插座-> ...