0
点赞
收藏
分享

微信扫一扫

Redis - RedisPoolUtil & RedisPool


package com.mmall.util;

import com.mmall.common.RedisPool;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;

@Slf4j
public class RedisPoolUtil {

/**
* 设置key的有效期,单位是秒
* @param key
* @param exTime
* @return
*/
public static Long expire(String key,int exTime){
Jedis jedis = null;
Long result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.expire(key,exTime);
} catch (Exception e) {
log.error("expire key:{} error",key,e);
RedisPool.returnBrokenResource(jedis);
return result;
}
RedisPool.returnResource(jedis);
return result;
}

// exTime的单位是秒
public static String setEx(String key,String value,int exTime){
Jedis jedis = null;
String result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.setex(key,exTime,value);
} catch (Exception e) {
log.error("setex key:{} value:{} error",key,value,e);
RedisPool.returnBrokenResource(jedis);
return result;
}
RedisPool.returnResource(jedis);
return result;
}

public static String set(String key,String value){
Jedis jedis = null;
String result = null;

try {
jedis = RedisPool.getJedis();
result = jedis.set(key,value);
} catch (Exception e) {
log.error("set key:{} value:{} error",key,value,e);
RedisPool.returnBrokenResource(jedis);
return result;
}
RedisPool.returnResource(jedis);
return result;
}

public static String get(String key){
Jedis jedis = null;
String result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.get(key);
} catch (Exception e) {
log.error("get key:{} error",key,e);
RedisPool.returnBrokenResource(jedis);
return result;
}
RedisPool.returnResource(jedis);
return result;
}

public static Long del(String key){
Jedis jedis = null;
Long result = null;
try {
jedis = RedisPool.getJedis();
result = jedis.del(key);
} catch (Exception e) {
log.error("del key:{} error",key,e);
RedisPool.returnBrokenResource(jedis);
return result;
}
RedisPool.returnResource(jedis);
return result;
}

public static void main(String[] args) {
Jedis jedis = RedisPool.getJedis();

RedisShardedPoolUtil.set("keyTest","value");

String value = RedisShardedPoolUtil.get("keyTest");

RedisShardedPoolUtil.setEx("keyex","valueex",60*10);

RedisShardedPoolUtil.expire("keyTest",60*20);

RedisShardedPoolUtil.del("keyTest");

String aaa = RedisShardedPoolUtil.get(null);
System.out.println(aaa);

System.out.println("end");
}

}
package com.mmall.common;

import com.mmall.util.PropertiesUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisPool {

private static JedisPool pool; // jedis连接池
private static Integer maxTotal = Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20")); //最大连接数
private static Integer maxIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.max.idle","20"));//在jedispool中最大的idle状态(空闲的)的jedis实例的个数
private static Integer minIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle","20"));//在jedispool中最小的idle状态(空闲的)的jedis实例的个数

private static Boolean testOnBorrow = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow","true"));//在borrow一个jedis实例的时候,是否要进行验证操作,如果赋值true。则得到的jedis实例肯定是可以用的。
private static Boolean testOnReturn = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return","true"));//在return一个jedis实例的时候,是否要进行验证操作,如果赋值true。则放回jedispool的jedis实例肯定是可以用的。

private static String redisIp = PropertiesUtil.getProperty("redis.ip");
private static Integer redisPort = Integer.parseInt(PropertiesUtil.getProperty("redis.port"));


private static void initPool(){
JedisPoolConfig config = new JedisPoolConfig();

config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMinIdle(minIdle);

config.setTestOnBorrow(testOnBorrow);
config.setTestOnReturn(testOnReturn);

config.setBlockWhenExhausted(true); // 连接耗尽的时候,是否阻塞,false会抛出异常,true阻塞直到超时。默认为true。

pool = new JedisPool(config,redisIp,redisPort,1000*2);
}

static{
initPool();
}

public static Jedis getJedis(){
return pool.getResource();
}

public static void returnBrokenResource(Jedis jedis){
pool.returnBrokenResource(jedis);
}

public static void returnResource(Jedis jedis){
pool.returnResource(jedis);
}

public static void main(String[] args) {
Jedis jedis = pool.getResource();
jedis.set("geelykey","geelyvalue");
returnResource(jedis);

pool.destroy(); // 临时调用,销毁连接池中的所有连接
System.out.println("program is end");
}
}
  • returnBrokenResource:不正常时释放资源
  • returnResource:正常释放资源


举报

相关推荐

0 条评论