项目中需要用到缓存减少数据库压力,选择redis作为工具,构建一个jedis池达到实际效果
1
1.JedisPoolCacheUtils<!-- https://mvnrepository.com/artifact/redis.clients/jedis 引入pom -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
package com.ithzk.common.redis;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ithzk.common.util.Detect;
import com.ithzk.common.util.JsonUtil;
import com.ithzk.common.util.PropertiesUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* redis 操作数据库配置类
* @author huzekun
* @date:2017年12月27日 下午3:01:04
*/
@Component("JedisPoolCacheUtils")
public class JedisPoolCacheUtils {
private final static Logger log = Logger.getLogger(JedisPoolCacheUtils.class);
public final static String DATA_REDIS_KEY = "data_";
/**
* redis过期时间,以秒为单位
*/
public final static int EXRP_HOUR = 60 * 60; //一小时
public final static int EXRP_HALF_DAY = 60 * 60 * 12; //半天
public final static int EXRP_DAY = 60 * 60 * 24; //一天
public final static int EXRP_MONTH = 60 * 60 * 24 * 30; //一个月
private static JedisPool jedisPool = null;
/**
* 初始化Redis连接池
*/
public static void initialPool(String path){
Properties prop = new Properties();
try {
prop.load(JedisPoolCacheUtils.class.getClassLoader().getResourceAsStream(path+"-conf/redis.properties"));
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Detect.asPrimitiveInt(prop.getProperty("redis.pool.maxActive")));
config.setMaxIdle(Detect.asPrimitiveInt(prop.getProperty("redis.pool.maxIdle")));
config.setMinIdle(Detect.asPrimitiveInt(prop.getProperty("redis.pool.minIdle")));
config.setMaxWaitMillis(Detect.asPrimitiveInt(prop.getProperty("redis.pool.maxWait")));
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
config.setTestWhileIdle(true);
String host = prop.getProperty("redis.host");
String port = prop.getProperty("redis.port");
String timeOut = prop.getProperty("redis.timeout");
jedisPool = new JedisPool(config, host, Detect.asPrimitiveInt(port), Detect.asPrimitiveInt(timeOut));
} catch (Exception e) {
log.error("First create JedisPool error : "+e);
try{
//如果第一个IP异常,则访问第二个IP
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Detect.asPrimitiveInt(PropertiesUtil.getValueByBundleFromConf(path+"-conf/redis.properties","redis.pool.maxActive")));
config.setMaxIdle(Detect.asPrimitiveInt(PropertiesUtil.getValueByBundleFromConf(path+"-conf/redis.properties","redis.pool.maxIdle")));
config.setMinIdle(Detect.asPrimitiveInt(PropertiesUtil.getValueByBundleFromConf(path+"-conf/redis.properties","redis.pool.minIdle")));
config.setMaxWaitMillis(Detect.asPrimitiveInt(PropertiesUt