RedisShardePool.java
package com.jmall.common;
import com.jmall.util.PropertiesUtil;
import redis.clients.jedis.*;
import redis.clients.util.Hashing;
import redis.clients.util.Sharded;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: jackie
* @Date: 2018/12/29 21:22
* @Version 1.0
*/
public class RedisShardedPool {
private static ShardedJedisPool pool;//jedis连接数
private static Integer maxTotal = Integer.parseInt(PropertiesUtil.getProperty("redis.max.total","20"));//最大连接数
private static Integer maxIdle = Integer.parseInt(PropertiesUtil.getProperty("radis.max.idle","10"));//在jedispool中最大的idle状态(空闲的)jedis实例的个数
private static Integer minIdle = Integer.parseInt(PropertiesUtil.getProperty("redis.min.idle","2"));//在jedispool中最小的idle状态(空闲的)jedis实例的个数
private static Boolean testOnBorrow = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.borrow","true"));//在borow一个jedis实例的时候,是否要进行验证操作,如果赋值true,则得到的jedis实例肯定是可以用的。
private static Boolean testOnReturn = Boolean.parseBoolean(PropertiesUtil.getProperty("redis.test.return","true"));//在return一个jedis实例的时候,是否要进行验证操作,如果赋值true,则放回的jedis实例肯定是可以用的。
private static String redis1Ip = PropertiesUtil.getProperty("redis1.ip");
private static Integer redis1Port = Integer.parseInt(PropertiesUtil.getProperty("redis1.port"));
private static String redis2Ip = PropertiesUtil.getProperty("redis2.ip");
private static Integer redis2Port = Integer.parseInt(PropertiesUtil.getProperty("redis2.port"));
private static void initPool(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setTestOnBorrow(testOnBorrow);
jedisPoolConfig.setTestOnReturn(testOnReturn);
jedisPoolConfig.setBlockWhenExhausted(true);//连接耗尽的时候,是否阻塞,false会抛出异常,true阻塞直到超时。默认true
JedisShardInfo info1 = new JedisShardInfo(redis1Ip, redis1Port, 1000 * 2);
JedisShardInfo info2 = new JedisShardInfo(redis2Ip, redis2Port, 1000 * 2);
List jedisShardInfoList = new ArrayList<>(2);
jedisShardInfoList.add(info1);
jedisShardInfoList.add(info2);
pool = new ShardedJedisPool(jedisPoolConfig, jedisShardInfoList, Hashing.MURMUR_HASH, Sharded.DEFAULT_KEY_TAG_PATTERN);
}
//类加载的时候初始化连接池
static {
initPool();
}
public static ShardedJedis getJedis() {
return pool.getResource();
}
public static void returnResource(ShardedJedis jedis) {
pool.returnResource(jedis);
}
public static void returnBrokenResource(ShardedJedis jedis) {
pool.returnBrokenResource(jedis);
}
public static void main(String[] args) {
ShardedJedis jedis = pool.getResource();
for (int i = 0; i < 10; i++) {
jedis.set("key" + i, "value" + i);
}
pool.returnResource(jedis);
//pool.destroy();
System.out.println("program is over.");
}
}
RedisShardedPoolUtil.java
package com.jmall.util;
import com.jmall.common.RedisPool;
import com.jmall.common.RedisShardedPool;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ShardedJedis;
/**
* @Author: jackie
* @Date: 2018/12/22 18:51
* @Version 1.0
*/
@Slf4j
public class RedisShardedPoolUtil {
public static String set(String key,String value) {
ShardedJedis jedis = null;
String result = null;
try {
jedis = RedisShardedPool.getJedis();
result = jedis.set(key,value);
} catch (Exception e) {
log.error("set key:{},value:{} error",key,value,e);
RedisShardedPool.returnBrokenResource(jedis);
return result;
}
RedisShardedPool.returnResource(jedis);
return result;
}
//exTime 单位秒
public static String setEx(String key,String value,int exTime) {
ShardedJedis jedis = null;
String result = null;
try {
jedis = RedisShardedPool.getJedis();
result = jedis.setex(key,exTime,value);
} catch (Exception e) {
log.error("setEx key:{},value:{} error",key,value,e);
RedisShardedPool.returnBrokenResource(jedis);
return result;
}
RedisShardedPool.returnResource(jedis);
return result;
}
public static String get(String key) {
ShardedJedis jedis = null;
String result = null;
try {
jedis = RedisShardedPool.getJedis();
result = jedis.get(key);
} catch (Exception e) {
log.error("get key:{} error",key,e);
RedisShardedPool.returnBrokenResource(jedis);
return result;
}
RedisShardedPool.returnResource(jedis);
return result;
}
public static Long del(String key) {
ShardedJedis jedis = null;
Long result = null;
try {
jedis = RedisShardedPool.getJedis();
result = jedis.del(key);
} catch (Exception e) {
log.error("del key:{} error",key,e);
RedisShardedPool.returnBrokenResource(jedis);
return result;
}
RedisShardedPool.returnResource(jedis);
return result;
}
/**
* 设置key的有效期,单位是秒
* @param key
* @param seconds
* @return
*/
public static Long expire(String key,int seconds) {
ShardedJedis jedis = null;
Long result = null;
try {
jedis = RedisShardedPool.getJedis();
result = jedis.expire(key,seconds);
} catch (Exception e) {
log.error("expire key:{} error",key,e);
RedisShardedPool.returnBrokenResource(jedis);
return result;
}
RedisShardedPool.returnResource(jedis);
return result;
}
public static void main(String[] args) {
for (int i = 0; i < 20; i++) {
RedisShardedPoolUtil.set("keyTest" + i, "value" + i);
}
String value = RedisShardedPoolUtil.get("keyTest");
/*RedisShardedPoolUtil.setEx("keyEx", "valueEx", 60 * 10);
RedisShardedPoolUtil.expire("keyTest", 60 * 10);
RedisShardedPoolUtil.del("keyTest");*/
System.out.println("game over!!");
}
}