1.引入依賴java
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> </dependency>
2.配置鏈接屬性創建 redis.properties 文件redis
redis1.ip=127.0.0.1//你的redis集羣IP redis1.port=6379//端口,有密碼的須要配置密碼 redis2.ip=127.0.0.1 redis2.port=6380 #最大鏈接數 redis.max.total=20 #最大空閒數 redis.max.idle=10 #最小空閒數 redis.min.idle=2 #從jedis鏈接池獲取鏈接時,校驗並返回可用的鏈接 redis.test.borrow=true #把鏈接放回jedis鏈接池時,校驗並返回可用的鏈接 redis.test.return=false
3.讀取配置文件類 新建PropertiesUtil.java 記得導入包哦工具
public class PropertiesUtil { private static Properties props; static { String fileName = "redis.properties"; props = new Properties(); try { props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName),"UTF-8")); } catch (IOException e) { log.error("配置文件讀取異常",e); } } public static String getProperty(String key){ String value = props.getProperty(key.trim()); if(StringUtils.isBlank(value)){ return null; } return value.trim(); } public static String getProperty(String key,String defaultValue){ String value = props.getProperty(key.trim()); if(StringUtils.isBlank(value)){ value = defaultValue; } return value.trim(); } }
4.建立鏈接池類RedisShardPool.java 記得導入你的配置文件類測試
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; import redis.clients.util.Hashing; import redis.clients.util.Sharded; import java.util.ArrayList; import java.util.List; public class RedisShardedPool { private static ShardedJedisPool pool;//sharded 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 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 config = new JedisPoolConfig(); config.setMaxTotal(maxTotal); config.setMaxIdle(maxIdle); config.setMinIdle(minIdle); config.setTestOnBorrow(testOnBorrow); config.setTestOnReturn(testOnReturn); config.setBlockWhenExhausted(true);//鏈接耗盡的時候,是否阻塞,false會拋出異常,true阻塞直到超時。默認爲true。 JedisShardInfo info1 = new JedisShardInfo(redis1Ip,redis1Port,1000*2); JedisShardInfo info2 = new JedisShardInfo(redis2Ip,redis2Port,1000*2); List<JedisShardInfo> jedisShardInfoList = new ArrayList<JedisShardInfo>(2); jedisShardInfoList.add(info1); jedisShardInfoList.add(info2); pool = new ShardedJedisPool(config,jedisShardInfoList, Hashing.MURMUR_HASH, Sharded.DEFAULT_KEY_TAG_PATTERN); } static{ initPool(); } public static ShardedJedis getJedis(){ return pool.getResource(); } public static void returnBrokenResource(ShardedJedis jedis){ pool.returnBrokenResource(jedis); } public static void returnResource(ShardedJedis jedis){ pool.returnResource(jedis); } //簡單測試,可刪除 public static void main(String[] args) { ShardedJedis jedis = pool.getResource(); for(int i =0;i<10;i++){ jedis.set("key"+i,"value"+i); } returnResource(jedis); // pool.destroy();//臨時調用,銷燬鏈接池中的全部鏈接 System.out.println("program is end"); } }
5.簡單工具類 RedisShardedPoolUtil.javaip
import RedisShardedPool;//你的鏈接池 import lombok.extern.slf4j.Slf4j; import redis.clients.jedis.ShardedJedis; @Slf4j public class RedisShardedPoolUtil { /** * 設置key的有效期,單位是秒 * @param key * @param exTime * @return */ public static Long expire(String key,int exTime){ ShardedJedis jedis = null; Long result = null; try { jedis = RedisShardedPool.getJedis(); result = jedis.expire(key,exTime); } catch (Exception e) { log.error("expire key:{} error",key,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 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; } 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; } public static String getSet(String key,String value) { ShardedJedis jedis = null; String result = null; try { jedis = RedisShardedPool.getJedis(); result = jedis.getSet(key,value); } catch (Exception e) { log.error("getset key:{} error", key, e); RedisShardedPool.returnBrokenResource(jedis); return result; } RedisShardedPool.returnResource(jedis); return result; } public static Long setnx(String key, String value) { ShardedJedis jedis = null; Long result = null; try { jedis = RedisShardedPool.getJedis(); result = jedis.setnx(key, value); } catch (Exception e) { log.error("setnx key:{} value:{} error", key, value, e); RedisShardedPool.returnBrokenResource(jedis); return result; } RedisShardedPool.returnResource(jedis); return result; } //簡單測試,可刪除 public static void main(String[] args) { ShardedJedis jedis = RedisShardedPool.getJedis(); RedisPoolUtil.set("keyTest","value"); String value = RedisPoolUtil.get("keyTest"); RedisPoolUtil.setEx("keyex","valueex",60*10); RedisPoolUtil.expire("keyTest",60*20); RedisPoolUtil.del("keyTest"); String aaa = RedisPoolUtil.get(null); System.out.println(aaa); System.out.println("end"); } }