1. 程式人生 > >springboot整合jedis

springboot整合jedis

首先是springboot配置檔案application.properties中的redis配置 

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=xxx
spring.redis.timeout=10
spring.redis.jedis.pool.max-active=200
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.min-idle=10
spring.redis.jedis.pool.max-wait=10000

 建立一個生成JedisPool的工廠

@Configuration
public class JedisPoolFactory {
	@Value("${spring.redis.host}")
	private String host;
	
	@Value("${spring.redis.port}")
	private int port;
	
	@Value("${spring.redis.password}")
	private String password;
	
	@Value("${spring.redis.timeout}")
	private int timeout;
	
	@Value("${spring.redis.jedis.pool.max-active}")
	private int maxActive;
	
	@Value("${spring.redis.jedis.pool.max-idle}")
	private int maxIdle;
	
	@Value("${spring.redis.jedis.pool.min-idle}")
	private int minIdle;
	
	@Value("${spring.redis.jedis.pool.max-wait}")
	private long maxWaitMillis;
	
	@Bean
	public JedisPool generateJedisPoolFactory() {
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxTotal(maxActive);
		poolConfig.setMaxIdle(maxIdle);
		poolConfig.setMinIdle(minIdle);
		poolConfig.setMaxWaitMillis(maxWaitMillis);
		JedisPool jedisPool = new JedisPool(poolConfig, host, port, timeout, password);
		return jedisPool;
	}
}

編寫工具類,這裡的@Component註解不能丟,否則jedisPool為空,

@Component
public class RedisUtil {
	@Autowired
	private JedisPool jedisPool;
	
	/**
	 * 儲存字串鍵值對
	 * @param key
	 * @param value
	 * @return
	 * @author hw
	 * @date 2018年12月14日
	 */
	public String set(String key, String value) {
		Jedis jedis = jedisPool.getResource();
		try {
			return jedis.set(key, value);
		} catch (Exception e) {
			throw new SysException(e.getMessage());
		} finally {
			jedis.close();
		}
	}
	
	/**
	 * 得到對應鍵的字串值
	 * @param key
	 * @return
	 * @author hw
	 * @date 2018年12月14日
	 */
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		try {
			return jedis.get(key);
		} catch (Exception e) {
			throw new SysException(e.getMessage());
		} finally {
			jedis.close();
		}
	}
	
	/**
	 * 刪除字串鍵值對
	 * @param key
	 * @return
	 * @author hw
	 * @date 2018年12月14日
	 */
	public Long del(String key) {
		Jedis jedis = jedisPool.getResource();
		try {
			return jedis.del(key);
		} catch (Exception e) {
			throw new SysException(e.getMessage());
		} finally {
			jedis.close();
		}
	}
	
	/**
	 * 儲存物件
	 * @param key
	 * @param value
	 * @return
	 * @author hw
	 * @date 2018年12月14日
	 */
	public String setObject(String key, Object value) {
		Jedis jedis = jedisPool.getResource();
		try {
			return jedis.set(key.getBytes(), ObjectUtil.serialize(value));
		} catch (Exception e) {
			throw new SysException(e.getMessage());
		} finally {
			jedis.close();
		}
	}
	
	/**
	 * 得到對應鍵的物件
	 * @param key
	 * @return
	 * @author hw
	 * @date 2018年12月14日
	 */
	public Object getObject(String key) {
		Jedis jedis = jedisPool.getResource();
		try {
			byte[] byteArr =  jedis.get(key.getBytes());
			return ObjectUtil.unSerialize(byteArr);
		} catch (Exception e) {
			throw new SysException(e.getMessage());
		} finally {
			jedis.close();
		}
	}
}

附上ObjectUtil

public class ObjectUtil {
	
	/**
	 * 判斷物件是否為空
	 * @param o
	 * @return
	 * @author hw
	 * @date 2018年12月11日
	 */
	@SuppressWarnings("rawtypes")
	public static boolean isEmpty(Object o) {
		if (o == null) {
			return true;
		} else if (o instanceof String) {
			String s = (String) o;
			if ("".equals(s.trim())) {
				return true;
			} else {
				return false;
			}
		} else if (o instanceof Collection) {
			return ((Collection) o).isEmpty();
		} else if (o instanceof Map) {
			return ((Map) o).isEmpty();
		} else if (o.getClass().isArray()) {
			return Array.getLength(o) == 0;
		} else {
			return false;
		}
	}
	
	/**
	 * 將物件序列化
	 * @param o
	 * @return
	 * @author hw
	 * @date 2018年12月14日
	 */
	public static byte[] serialize(Object o) {
		ObjectOutputStream oos = null;
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		try {
			oos = new ObjectOutputStream(baos);
			oos.writeObject(o);
		} catch (IOException e) {
			e.printStackTrace();
			throw new SysException(e.getMessage());
		} finally {
			closeObjectOutputStream(oos);
		}
		return baos.toByteArray();
	}
	
	/**
	 * 將物件反序列化
	 * @param byteArr
	 * @return
	 * @author hw
	 * @date 2018年12月14日
	 */
	public static Object unSerialize(byte[] byteArr) {
		ObjectInputStream ois = null;
		ByteArrayInputStream bais = new ByteArrayInputStream(byteArr);
		Object o = null;
		try {
			ois = new ObjectInputStream(bais);
			o = ois.readObject();
		} catch (Exception e) {
			throw new SysException(e.getMessage());
		} finally {
			closeObjectIutputStream(ois);
		}
		return o;
	}
	
	/**
	 * 關閉物件輸出流
	 * @param oos
	 * @author hw
	 * @date 2018年12月14日
	 */
	private static void closeObjectOutputStream(ObjectOutputStream oos) {
		if (oos != null) {
			try {
				oos.close();
			} catch (IOException e) {
				throw new SysException(e.getMessage());
			}
		}
		oos = null;
	}
	
	/**
	 * 關閉物件輸入流
	 * @param ois
	 * @author hw
	 * @date 2018年12月14日
	 */
	private static void closeObjectIutputStream(ObjectInputStream ois) {
		if (ois != null) {
			try {
				ois.close();
			} catch (IOException e) {
				throw new SysException(e.getMessage());
			}
		}
		ois = null;
	}
}

以上程式碼由網上收集整合而成,測試有效