缓存 | Redis |
---|---|
Redis 连接池 | RedisPoolUtil.java |
Redis 集群 连接 | RedisShardedPoolUtil.java |
通用部分 | RedisPool.java |
通用部分 | RedisShardedPool.java |
通用部分 | RedissonManager.java |
在这里插入代码片
RedisPoolUtil.java
package com.mmall.util;import com.mmall.common.RedisPool;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;/*** Created by geely*/
@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");}
}
RedisShardedPoolUtil.java
package com.mmall.util;import com.mmall.common.RedisShardedPool;
import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.ShardedJedis;/*** Created by geely*/
@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 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:{} 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 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");}
}
通用部分:
RedisShardedPool.java
package com.mmall.common;import com.mmall.util.PropertiesUtil;
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;/*** Created by geely*/
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");}
}
RedisPool.java
package com.mmall.common;import com.mmall.util.PropertiesUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** Created by geely*/
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");}
}
RedissonManager.java
package com.mmall.common;import com.mmall.util.PropertiesUtil;
import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.config.Config;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;/*** Created by geely*/
@Component
@Slf4j
public class RedissonManager {private Config config = new Config();private Redisson redisson = null;public Redisson getRedisson() {return redisson;}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"));@PostConstructprivate void init(){try {config.useSingleServer().setAddress(new StringBuilder().append(redis1Ip).append(":").append(redis1Port).toString());redisson = (Redisson) Redisson.create(config);log.info("初始化Redisson结束");} catch (Exception e) {log.error("redisson init error",e);}}
}