1. 程式人生 > 程式設計 >詳解java操作Redis資料庫的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoolUtil)

詳解java操作Redis資料庫的redis工具(RedisUtil,jedis工具JedisUtil,JedisPoolUtil)

該工具包含是封裝了jedis,包含redis.properties和jedisPool,序列化使用的是protostuff,map型別操作使用的是faston

自己抽空寫的,基本只要理解什麼是get,什麼是set就可以使用redis了

下載地址:點選開啟連結

JedisPoolUtil的原始碼:

package com.bsy.common;
 
import .io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
 
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
public class JedisPoolUtil {
 
	private static final String PROPERTIES_PATH = "redis.properties";
	private static JedisPool jedisPool;
 
	
	static {
		if (jedisPool == null) {
			try {
				init();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
 
	/**
	 * 初始化Jedis連線池
	 * 
	 * @throws IOException
	 */
	private static void init() throws IOException {
		URL resource = JedisPoolUtil.class.getClassLoader().getResource(PROPERTIES_PATH);
		if (resource == null) {
			throw new FileNotFoundException("沒有找到指定redis的配置檔案:" + PROPERTIES_PATH);
		}
		//載入配置檔案
		InputStream input = new FileInputStream(resource.getFile());
		Properties p = new Properties();
		p.load(input);
		//開始配置JedisPool
		String host = p.getProperty("redis.host") == null ? "localhost" : p.getProperty("redis.host");
		int port = p.getProperty("redis.port") == null ? 6379 : Integer.parseInt(p.getProperty("redis.port"));
		String auth = p.getProperty("redis.auth");
		int poolTimeOut = p.getProperty("connectionTimeOut") == null ? 2000
				: Integer.parseInt(p.getProperty("connectionTimeOut"));
		//判斷使用預設的配置方式還是採用自定義配置方式,boolean isSetDefault = p.getProperty("defaultSetting") == null ? true
				: Boolean.parseBoolean(p.getProperty("defaultSetting"));
		if (isSetDefault) {
			jedisPool = new JedisPool(new GenericObjectPoolConfig(),host,port,poolTimeOut,auth);
		} else {
			JedisPoolConfig config = new JedisPoolConfig();
			String blockWhenExhausted = p.getProperty("redis.blockWhenExhausted");
			if (blockWhenExhausted != null) {
				config.setBlockWhenExhausted(Boolean.parseBoolean(blockWhenExhausted));
			}
			String evictionPolicyClassName = p.getProperty("redis.evictionPolicyClassName");
			if (evictionPolicyClassName != null) {
				config.setEvictionPolicyClassName(evictionPolicyClassName);
			}
			String jmxEnabled = p.getProperty("redis.jmxEnabled");
			if (jmxEnabled != null) {
				config.setJmxEnabled(Boolean.parseBoolean(jmxEnabled));
			}
			String lifo = p.getProperty("redis.lifo");
			if (lifo != null) {
				config.setLifo(Boolean.parseBoolean(lifo));
			}
			String maxIdle = p.getProperty("redis.maxIdle");
			if (maxIdle != null) {
				config.setMaxIdle(Integer.parseInt(maxIdle));
			}
			String maxTotal = p.getProperty("redis.maxTotal");
			if (maxTotal != null) {
				config.setMaxTotal(Integer.parseInt(maxTotal));
			}
			String maxWaitMillis = p.getProperty("redis.maxWaitMillis");
			if (maxWaitMillis != null) {
				config.setMaxWaitMillis(Long.parseLong(maxWaitMillis));
			}
			String minEvictableIdleTimeMillis = p.getProperty("redis.minEvictableIdleTimeMillis");
			if (minEvictableIdleTimeMillis != null) {
				config.setMinEvictableIdleTimeMillis(Long.parseLong(minEvictableIdleTimeMillis));
			}
			String minIdle = p.getProperty("redis.minIdle");
			if (minIdle != null) {
				config.setMinIdle(Integer.parseInt(minIdle));
			}
			String numTestsPerEvictionRun = p.getProperty("redis.numTestsPerEvictionRun");
			if (numTestsPerEvictionRun != null) {
				config.setNumTestsPerEvictionRun(Integer.parseInt(numTestsPerEvictionRun));
			}
			String softMinEvictableIdleTimeMillis = p.getProperty("redis.softMinEvictableIdleTimeMillis");
			if (softMinEvictableIdleTimeMillis != null) {
				config.setSoftMinEvictableIdleTimeMillis(Long.parseLong(softMinEvictableIdleTimeMillis));
			}
			String testOnBorrow = p.getProperty("redis.testOnBorrow");
			if (testOnBorrow != null) {
				config.setTestOnBorrow(Boolean.parseBoolean(testOnBorrow));
			}
			String testWhileIdle = p.getProperty("redis.testWhileIdle");
			if (testWhileIdle != null) {
				config.setTestWhileIdle(Boolean.parseBoolean(testWhileIdle));
			}
			String timeBetweenEvictionRunsMillis = p.getProperty("redus.timeBetweenEvictionRunsMillis");
			if (timeBetweenEvictionRunsMillis != null) {
				config.setTimeBetweenEvictionRunsMillis(Long.parseLong(timeBetweenEvictionRunsMillis));
			}
			jedisPool = new JedisPool(config,auth);
		}
 
	}
 
	public static Jedis getJedis() {
		return jedisPool.getResource();
	}
 
	public static void closeJedis(Jedis jedis) {
		if (jedis != null) {
			jedis.close();
		}
	}
 
}

redis.properties原始碼:

#redis地址
redis.host=localhost
#redis埠號
redis.port=6379
#redis的密碼
#redis.auth=

#是否使用JedisPool預設的配置,確定true,預設true
#defaultSetting=false;
#jedisPool的timeout時間,預設2000
#connectionTimeOut=
#連線耗盡時是否阻塞,false報異常,ture阻塞直到超時,預設true
#redis.blockWhenExhausted=true
#設定的逐出策略類名,預設DefaultEvictionPolicy(當連線超過最大空閒時間,或連線數超過最大空閒連線數)
#redis.evictionPolicyClassName=org.apache.commons.pool2.impl.DefaultEvictionPolicy
#是否啟用pool的jmx管理功能,預設true
#redis.jmxEnabled=true
#是否啟用後進先出,預設true
#redis.lifo=true
#最大空閒連線數,預設8個
#redis.maxIdle=8	
#最大連線數,預設8個
#redis.maxTotal=8
#獲取連線時的最大等待毫秒數(如果設定為阻塞時BlockWhenExhausted),如果超時就拋異常,小於零:阻塞不確定的時間,預設-1
#redis.maxWaitMillis=-1
#逐出連線的最小空閒時間 預設1800000毫秒(30分鐘)
#redis.minEvictableIdleTimeMillis=1800000
#最小空閒連線數,預設0
#redis.minIdle=0
#每次逐出檢查時 逐出的最大數目 如果為負數就是 : 1/abs(n),預設3
#redis.numTestsPerEvictionRun=3
#物件空閒多久後逐出,當空閒時間>該值 且 空閒連線>最大空閒數 時直接逐出,不再根據MinEvictableIdleTimeMillis判斷  (預設逐出策略)   
#redis.softMinEvictableIdleTimeMillis=1800000
#在獲取連線的時候檢查有效性,預設false
#redis.testOnBorrow=false
#在空閒時檢查有效性,預設false
#redis.testWhileIdle=false
#逐出掃描的時間間隔(毫秒) 如果為負數,則不執行逐出執行緒,預設-1
#redus.timeBetweenEvictionRunsMillis=-1

JedisUtil原始碼:

package com.bsy.cohttp://www.cppcns.commmon;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
import com.alibaba.fastjson.JSON;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.pseXmfSKRk
rotostuff.ProtostuffIOUtil; import com.dyuproject.protostuff.runtime.RuntimeSchema; import redis.clients.jedis.Jedis; import redis.clients.jedis.exceptions.JedisDataException; /** * jedis的幫助工具 本類map依賴fastjson,物件與集合使用protostuff序列化框架 jedis版本2.9.0 * protostuff相關版本1.0.8 fastjson版本1.2.32 使用maven自動新增依賴 * * @author Mirren * */ public class JedisUtil { private static final int DEFAULT_SETEX_TIMEOUT = 60 * 60;// setex的預設時間 /** * 新增一個字串值,成功返回1,失敗返回0 * * @param key * @param value * @return */ public static int set(String key,String value) { if (isValueNull(key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); if (jedis.set(key,value).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個字串值,失敗返回0,預設快取時間為1小時,以本類的常量DEFAULT_SETEX_TIMEOUT為準 * * @param key * @param value * @return */ public static int setEx(String key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); if (jedis.setex(key,DEFAULT_SETEX_TIMEOUT,value).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個字串值,快取時間以timeout為準,單位秒 * * @param key * @param value * @param timeout * @return */ public static int setEx(String key,String value,int timeout) { if (isValueNull(key,timeout,value).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個指定型別的物件,失敗返回0 * * @param key * @param value * @return */ public static <T> int set(String key,T value) { if (isValueNull(key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); byte[] data = enSeri(value); if (jedis.set(key.getBytes(),data).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個指定型別的物件,以本類的常量DEFAULT_SETEX_TIMEOUT為準 * * @param key * @param value * @return */ public static <T> int setEx(String key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); byte[] data = enSeri(value); if (jedis.setex(key.getBytes(),單位秒 * * @param key * @param value * @param timeout * @return */ public static <T> int setEx(String key,T value,data).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 將一個數值+1,成功返回+後的結果,失敗返回null * * @param key * @return * @throws JedisDataException */ public static Long incr(String key) throws JedisDataException { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); return jedis.incr(key); } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 將一個數值-1,成功返回-後的結果,失敗返回null * * @param key * @return * @throws JedisDataException */ public static Long decr(String key) throws JedisDataException { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); return jedis.decr(key); } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個字串值到list中,失敗返回0 * * @param key * @param value * @return */ public static int setList(String key,String... value) { if (isValueNull(key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); Long result = jedis.rpush(key,value); if (result != null && result != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個字串值到list中,全部list的key預設快取時間為1小時,失敗返回0 * * @param key * @param value * @return */ public static int setExList(String key,value); jedis.expire(key,DEFAULT_SETEX_TIMEOUT); if (result != null && result != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個字串值到list中,全部list的key快取時間為timeOut,單位為秒,int timeOut,timeOut); if (result != null && result != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個<T>型別物件值到list中,失敗返回0 * * @param key * @param value * @return */ @SafeVarargs public static <T> int setList(String key,T... value) { if (isValueNull(key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); int res = 0; for (T t : value) { byte[] data = enSeri(t); Long result = jedis.rpush(key.getBytes(),data); if (result != null && result != 0) { res++; } } if (res != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個<T>型別物件值到list中,失敗返回0 * * @param key * @param value * @return */ @SafeVarargs public static <T> int setExList(String key,data); if (result != null && result != 0) { res++; } } jedis.expire(key,DEFAULT_SETEX_TIMEOUT); if (res != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個<T>型別物件值到list中,單位秒,timeOut); if (res != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個List集合成功返回1,失敗返回0 * * @param key * @param value * @return * @throws IOException * @throws RuntimeException */ public static <T> int setList(String key,List<T> value) throws RuntimeException,IOException { if (isValueNull(key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); byte[] data = enSeriList(value); if (jedis.set(key.getBytes(),data).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個List<T>集合,以本類的常量DEFAULT_SETEX_TIMEOUT為準 * * @param key * @param value * @return * @throws IOException * @throws RuntimeException */ public static <T> int setExList(String key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); byte[] data = enSeriList(value); if (jedis.setex(key.getBytes(),單位秒 * * @param key * @param value * @param timeout * @return * @throws IOException * @throws RuntimeException */ public static <T> int setExList(String key,List<T> value,int timeout) throws RuntimeException,data).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個字串到set,如果key存在就在就最追加,如果key不存在就建立,失敗或者沒有受影響返回0 * * @param key * @param value * @return */ public static int setSet(String key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); Long result = jedis.sadd(key,value); if (result != null && result != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個字串set,整個set的key預設一小時後過期,如果key存在就在可以種繼續新增,失敗或者沒有受影響返回0 * * @param key * @param value * @return */ public static int setExSet(String key,DEFAULT_SETEX_TIMEOUT); if (result != null && result != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個字串set,整個set的key有效時間為timeOut時間,timeOut); if (result != null && result != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個<T>型別到set集合,失敗或者沒有受影響返回0 * * @param key * @param value * @return */ @SafeVarargs public static <T> int setSet(String key,value)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); int res = 0; for (T t : value) { byte[] data = enSeri(t); Long result = jedis.sadd(key.getBytes(),data); if (result != null && result != 0) { res++; } } if (res != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個<T>型別到set集合,整個set的key預設有效時間為1小時,失敗或者沒有受影響返回0 * * @param key * @param value * @return */ @SafeVarargs public static <T> int setExSet(String key,DEFAULT_SETEX_TIMEOUT); if (res != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個<T>型別到set集合,整個set的key有效時間為timeOut,timeOut); if (res != 0) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 新增一個Map<K,V>集合,失敗返回0 * * @param key * @param value * @param timeout * @return */ public static <K,V> int setMap(String key,Map<K,V> value) { if (value == null || key == null || "".equals(key)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); String data = JSON.toJSONString(value); if (jedis.set(key,data).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 快取一個Map<K,以本類的常量DEFAULT_SETEX_TIMEOUT為準 * * @param key * @param value * @param timeout * @return */ public static <K,V> int setExMap(String key,V> value) { if (value == null || key == null || "".equals(key)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); String data = JSON.toJSONString(value); if (jedis.setex(key,單位秒 * * @param key * @param value * @param timeout * @return */ public static <K,V> value,int timeout) { if (value == null || key == null || "".equals(key)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); String data = JSON.toJSONString(value); if (jedis.setex(key,data).equalsIgnoreCase("ok")) { return 1; } else { return 0; } } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲取一個字串值 * * @param key * @return */ public static String get(String key) { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); return jedis.get(key); } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得一個指定型別的物件 * * @param key * @param value * @return */ public static <T> T get(String key,Class<T> clazz) { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); byte[] data = jedis.get(key.getBytes()); T result = deSeri(data,clazz); return result; } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得一個字串集合,區間以偏移量 START 和 END 指定。 其中 0 表示列表的第一個元素, 1 * 表示列表的第二個元素,以此類推。 你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。 * * @param key * @param start * @param end * @return */ public static List<String> getList(String key,long start,long end) { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); List<String> result = jedis.lrange(key,start,end); return result; } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得一個<T>型別的物件集合,區間以偏移量 START 和 END 指定。 其中 0 表示列表的第一個元素, 1 表示列表的第二個元素,以此類推。 * 你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。 * * @param key * @param start * @param end * @return */ public static <T> List<T> getList(String key,long end,Class<T> clazz) { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); List<byte[]> lrange = jedis.lrange(key.getBytes(),end); List<T> result = null; if (lrange != null) { for (byte[] data : lrange) { if (result == null) { result = new ArrayList<>(); } result.add(deSeri(data,clazz)); } } return rehttp://www.cppcns.comsult; } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得list中存了多少個值 * * @return */ public static long getListCount(String key) { if (isValueNull(key)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); return jedis.llen(key); } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得一個List<T>的集合,* * @param key * 鍵 * @param clazz * 返回集合的型別 * @return * @throws IOException */ public static <T> List<T> getList(S客棧tring key,Class<T> clazz) throws IOException { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); byte[] data = jedis.get(key.getBytes()); List<T> result = deSeriList(data,clazz); return result; } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得一個字串set集合 * * @param key * @return */ public static Set<String> getSet(String key) { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); Set<String> result = jedis.smembers(key); return result; } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得一個字串set集合 * * @param key * @return */ public static <T> Set<T> getSet(String key,Class<T> clazz) { if (isValueNull(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); Set<byte[]> smembers = jedis.smembers(key.getBytes()); Set<T> result = null; if (smembers != null) { for (byte[] data : smembers) { if (result == null) { result = new HashSet<>(); } result.add(deSeri(data,clazz)); } } return result; } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得集合中存在多少個值 * * @param key * @return */ public static long getSetCount(String key) { if (isValueNull(key)) { return 0; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); return jedis.scard(key); } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 獲得一個Map<v,k>的集合 * * @param key * @param v * @param k * @return */ public static <K,V> Map<K,V> getMap(String key,Class<K> k,Class<V> v) { if (key == null || "".equals(key)) { return null; } Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); String data = jedis.get(key); @SuppressWarnings("unchecked") Map<K,V> result = (Map<K,V>) JSON.parseObject(data); return result; } finally { JedisPoolUtil.closeJedis(jedis); } } /** * 刪除一個值 * * @param key */ public static void del(String... key) { Jedis jedis = null; try { jedis = JedisPoolUtil.getJedis(); for (int i = 0; i < key.length; i++) { jedis.del(key); } } finally { JedisPoolUtil.closeJedis(jedis); } } // --------------------------公用方法區------------------------------------ /** * 檢查值是否為null,如果為null返回true,不為null返回false * * @param obj * @return */ private static boolean isValueNull(Object... obj) { for (int i = 0; i < obj.length; i++) { if (obj[i] == null || "".equals(obj[i])) { return true; } } return false; } /** * 序列化一個物件 * * @param value * @return */ private static <T> byte[] enSeri(T value) { @SuppressWarnings("unchecked") RuntimeSchema<T> schema = (RuntimeSchema<T>) RuntimeSchema.createFrom(value.getClass()); byte[] data = ProtostuffIOUtil.toByteArray(value,schema,LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); return data; } /** * 反序列化一個物件 * * @param t * @return */ private static <T> T deSeri(byte[] data,Class<T> clazz) { if (data == null || data.length == 0) { return null; } RuntimeSchema<T> schema = RuntimeSchema.createFrom(clazz); T result = schema.newMessage(); ProtostuffIOUtil.mergeFrom(data,result,schema); return result; } /** * 序列化List集合 * * @param list * @return * @throws IOException */ private static <T> byte[] enSeriList(List<T> list) throws RuntimeException,IOException { if (list == null || list.size() == 0) { throw new RuntimeException("集合不能為空!"); } @SuppressWarnings("unchecked") RuntimeSchema<T> schema = (RuntimeSchema<T>) RuntimeSchema.getSchema(list.get(0).getClass()); ByteArrayOutputStream out = new ByteArrayOutputStream(); ProtostuffIOUtil.writeListTo(out,list,LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE)); byte[] byteArray = out.toByteArray(); return byteArray; } /** * 反序列化List集合 * * @param data * @param clazz * @return * @throws IOException */ private static <T> List<T> deSeriList(byte[] data,Class<T> clazz) throws IOException { if (data == null || data.length == 0) { return null; } RuntimeSchema<T> schema = RuntimeSchema.createFrom(clazz); List<T> result = ProtostuffIOUtil.parseListFrom(new ByteArrayInputStream(data),schema); return result; } }

到此這篇關於java操作Redis資料庫的redis工具的文章就介紹到這了,更多相關java操作Redis資料庫的redis工具內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!