1. 程式人生 > >jedis使用執行緒池封裝redis基本操作

jedis使用執行緒池封裝redis基本操作

redis客戶端 jedis 常用的 操作

key value

hash

list

set

zset

的基本操作

package cn.zto.util;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.Test;


import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.BinaryClient.LIST_POSITION;

/**
 * <p>redis通用工具類</p>
 * @author bigSea
 *
 */
public class RedisUtil {
	
	private JedisPool pool = null;
	
	/**
	 * <p>傳入ip和埠號構建redis 連線池</p>
	 * @param ip ip
	 * @param prot 埠
	 */
	public RedisUtil(String ip, int prot) {
		if (pool == null) {
			JedisPoolConfig config = new JedisPoolConfig();
			// 控制一個pool可分配多少個jedis例項,通過pool.getResource()來獲取;
			// 如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis例項,則此時pool的狀態為exhausted(耗盡)。
			config.setMaxActive(500);
			// 控制一個pool最多有多少個狀態為idle(空閒的)的jedis例項。
			config.setMaxIdle(5);
			// 表示當borrow(引入)一個jedis例項時,最大的等待時間,如果超過等待時間,則直接丟擲JedisConnectionException;
			config.setMaxWait(1000 * 100);
			// 在borrow一個jedis例項時,是否提前進行validate操作;如果為true,則得到的jedis例項均是可用的;
			config.setTestOnBorrow(true);
			// pool = new JedisPool(config, "192.168.0.121", 6379, 100000);
			pool = new JedisPool(config, ip, prot, 100000);
		}
	}

	/**
	 * <p>通過配置物件 ip 埠 構建連線池</p>
	 * @param config 配置物件
	 * @param ip ip
	 * @param prot 埠
	 */
	public RedisUtil(JedisPoolConfig config ,String ip, int prot){
		if (pool == null) {
			pool = new JedisPool(config,ip,prot,10000);
		}
	}
	
	/**
	 * <p>通過配置物件 ip 埠 超時時間 構建連線池</p>
	 * @param config 配置物件
	 * @param ip ip
	 * @param prot 埠
	 * @param timeout 超時時間
	 */
	public RedisUtil(JedisPoolConfig config ,String ip, int prot ,int timeout){
		if (pool == null) {
			pool = new JedisPool(config,ip,prot,timeout);
		}
	}
	
	/**
	 * <p>通過連線池物件 構建一個連線池</p>
	 * @param pool 連線池物件
	 */
	public RedisUtil(JedisPool pool){
		if (this.pool == null) {
			this.pool = pool;
		}
	}
	
	/**
	 * <p>通過key獲取儲存在redis中的value</p>
	 * <p>並釋放連線</p>
	 * @param key
	 * @return 成功返回value 失敗返回null
	 */
	public String get(String key){
		Jedis jedis = null;
		String value = null;
		try {
			jedis = pool.getResource();
			value = jedis.get(key);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			returnResource(pool, jedis);
		}
		return value;
	}
	
	/**
	 * <p>向redis存入key和value,並釋放連線資源</p>
	 * <p>如果key已經存在 則覆蓋</p>
	 * @param key
	 * @param value
	 * @return 成功 返回OK 失敗返回 0
	 */
	public String set(String key,String value){
		Jedis jedis = null;
		try {
			jedis = pool.getResource();
			return jedis.set(key, value);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
			return "0";
		} finally {
			returnResource(pool, jedis);
		}
	}
	
	
	/**
	 * <p>刪除指定的key,也可以傳入一個包含key的陣列</p>
	 * @param keys 一個key  也可以使 string 陣列
	 * @return 返回刪除成功的個數 
	 */
	public Long del(String...keys){
		Jedis jedis = null;
		try {
			jedis = pool.getResource();
			return jedis.del(keys);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
			return 0L;
		} finally {
			returnResource(pool, jedis);
		}
	}
	
	/**
	 * <p>通過key向指定的value值追加值</p>
	 * @param key 
	 * @param str 
	 * @return 成功返回 新增後value的長度 失敗 返回 新增的 value 的長度  異常返回0L
	 */
	public Long append(String key ,String str){
		Jedis jedis = null;
		Long res = null;
		try {
			jedis = pool.getResource();
			res = jedis.append(key, str);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
			return 0L;
		} finally {
			returnResource(pool, jedis);
		}
		return res;
	}
	
	/**
	 * <p>判斷key是否存在</p>
	 * @param key
	 * @return true OR false
	 */
	public Boolean exists(String key){
		Jedis jedis = null;
		try {
			jedis = pool.getResource();
			return jedis.exists(key);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
			return false;
		} finally {
			returnResource(pool, jedis);
		}
	}
	
	/**
	 * <p>設定key value,如果key已經存在則返回0,nx==> not exist</p>
	 * @param key
	 * @param value
	 * @return 成功返回1 如果存在 和 發生異常 返回 0
	 */
	public Long setnx(String key ,String value){
		Jedis jedis = null;
		try {
			jedis = pool.getResource();
			return jedis.setnx(key, value);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
			return 0L;
		} finally {
			returnResource(pool, jedis);
		}
	}
	
	/**
	 * <p>設定key value並制定這個鍵值的有效期</p>
	 * @param key
	 * @param value
	 * @param seconds 單位:秒
	 * @return 成功返回OK 失敗和異常返回null
	 */
	public String setex(String key,String value,int seconds){
		Jedis jedis = null;
		String res = null;
		try {
			jedis = pool.getResource();
			res = jedis.setex(key, seconds, value);
		} catch (Exception e) {
			pool.returnBrokenResource(jedis);
			e.printStackTrace();
		} finally {
			returnResource(pool, jedis);
		}
		return res;
	}
	
	
	/**
	 * <p>通過key 和offset 從指定的位置開始將原先value替換</p>
	 * <p>下標從0開始,offset表示從offset下標開始替換</p>
	 * <p>如果替換的字串長度過小則會這樣</p>
	 * <p>example:</p>
	 * <p>value : 
[email protected]
</p> * <p>str : abc </p> * <P>從下標7開始替換 則結果為</p> * <p>RES : bigsea.abc.cn</p> * @param key * @param str * @param offset 下標位置 * @return 返回替換後 value 的長度 */ public Long setrange(String key,String str,int offset){ Jedis jedis = null; try { jedis = pool.getResource(); return jedis.setrange(key, offset, str); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); return 0L; } finally { returnResource(pool, jedis); } } /** * <p>通過批量的key獲取批量的value</p> * @param keys string陣列 也可以是一個key * @return 成功返回value的集合, 失敗返回null的集合 ,異常返回空 */ public List<String> mget(String...keys){ Jedis jedis = null; List<String> values = null; try { jedis = pool.getResource(); values = jedis.mget(keys); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return values; } /** * <p>批量的設定key:value,可以一個</p> * <p>example:</p> * <p> obj.mset(new String[]{"key2","value1","key2","value2"})</p> * @param keysvalues * @return 成功返回OK 失敗 異常 返回 null * */ public String mset(String...keysvalues){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.mset(keysvalues); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>批量的設定key:value,可以一個,如果key已經存在則會失敗,操作會回滾</p> * <p>example:</p> * <p> obj.msetnx(new String[]{"key2","value1","key2","value2"})</p> * @param keysvalues * @return 成功返回1 失敗返回0 */ public Long msetnx(String...keysvalues){ Jedis jedis = null; Long res = 0L; try { jedis = pool.getResource(); res =jedis.msetnx(keysvalues); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>設定key的值,並返回一箇舊值</p> * @param key * @param value * @return 舊值 如果key不存在 則返回null */ public String getset(String key,String value){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.getSet(key, value); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過下標 和key 獲取指定下標位置的 value</p> * @param key * @param startOffset 開始位置 從0 開始 負數表示從右邊開始擷取 * @param endOffset * @return 如果沒有返回null */ public String getrange(String key, int startOffset ,int endOffset){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.getrange(key, startOffset, endOffset); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key 對value進行加值+1操作,當value不是int型別時會返回錯誤,當key不存在是則value為1</p> * @param key * @return 加值後的結果 */ public Long incr(String key){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.incr(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key給指定的value加值,如果key不存在,則這是value為該值</p> * @param key * @param integer * @return */ public Long incrBy(String key,Long integer){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.incrBy(key, integer); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>對key的值做減減操作,如果key不存在,則設定key為-1</p> * @param key * @return */ public Long decr(String key) { Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.decr(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>減去指定的值</p> * @param key * @param integer * @return */ public Long decrBy(String key,Long integer){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.decrBy(key, integer); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取value值的長度</p> * @param key * @return 失敗返回null */ public Long serlen(String key){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.strlen(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key給field設定指定的值,如果key不存在,則先建立</p> * @param key * @param field 欄位 * @param value * @return 如果存在返回0 異常返回null */ public Long hset(String key,String field,String value) { Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.hset(key, field, value); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key給field設定指定的值,如果key不存在則先建立,如果field已經存在,返回0</p> * @param key * @param field * @param value * @return */ public Long hsetnx(String key,String field,String value){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.hsetnx(key, field, value); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key同時設定 hash的多個field</p> * @param key * @param hash * @return 返回OK 異常返回null */ public String hmset(String key,Map<String, String> hash){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.hmset(key, hash); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key 和 field 獲取指定的 value</p> * @param key * @param field * @return 沒有返回null */ public String hget(String key, String field){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.hget(key, field); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key 和 fields 獲取指定的value 如果沒有對應的value則返回null</p> * @param key * @param fields 可以使 一個String 也可以是 String陣列 * @return */ public List<String> hmget(String key,String...fields){ Jedis jedis = null; List<String> res = null; try { jedis = pool.getResource(); res = jedis.hmget(key, fields); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key給指定的field的value加上給定的值</p> * @param key * @param field * @param value * @return */ public Long hincrby(String key ,String field ,Long value){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.hincrBy(key, field, value); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key和field判斷是否有指定的value存在</p> * @param key * @param field * @return */ public Boolean hexists(String key , String field){ Jedis jedis = null; Boolean res = false; try { jedis = pool.getResource(); res = jedis.hexists(key, field); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回field的數量</p> * @param key * @return */ public Long hlen(String key){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.hlen(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key 刪除指定的 field </p> * @param key * @param fields 可以是 一個 field 也可以是 一個數組 * @return */ public Long hdel(String key ,String...fields){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.hdel(key, fields); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回所有的field</p> * @param key * @return */ public Set<String> hkeys(String key){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.hkeys(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回所有和key有關的value</p> * @param key * @return */ public List<String> hvals(String key){ Jedis jedis = null; List<String> res = null; try { jedis = pool.getResource(); res = jedis.hvals(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取所有的field和value</p> * @param key * @return */ public Map<String, String> hgetall(String key){ Jedis jedis = null; Map<String, String> res = null; try { jedis = pool.getResource(); res = jedis.hgetAll(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key向list頭部新增字串</p> * @param key * @param strs 可以使一個string 也可以使string陣列 * @return 返回list的value個數 */ public Long lpush(String key ,String...strs){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.lpush(key, strs); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key向list尾部新增字串</p> * @param key * @param strs 可以使一個string 也可以使string陣列 * @return 返回list的value個數 */ public Long rpush(String key ,String...strs){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.rpush(key, strs); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key在list指定的位置之前或者之後 新增字串元素</p> * @param key * @param where LIST_POSITION列舉型別 * @param pivot list裡面的value * @param value 新增的value * @return */ public Long linsert(String key, LIST_POSITION where, String pivot, String value){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.linsert(key, where, pivot, value); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key設定list指定下標位置的value</p> * <p>如果下標超過list裡面value的個數則報錯</p> * @param key * @param index 從0開始 * @param value * @return 成功返回OK */ public String lset(String key ,Long index, String value){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.lset(key, index, value); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key從對應的list中刪除指定的count個 和 value相同的元素</p> * @param key * @param count 當count為0時刪除全部 * @param value * @return 返回被刪除的個數 */ public Long lrem(String key,long count,String value){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.lrem(key, count, value); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key保留list中從strat下標開始到end下標結束的value值</p> * @param key * @param start * @param end * @return 成功返回OK */ public String ltrim(String key ,long start ,long end){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.ltrim(key, start, end); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key從list的頭部刪除一個value,並返回該value</p> * @param key * @return */ public String lpop(String key){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.lpop(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key從list尾部刪除一個value,並返回該元素</p> * @param key * @return */ public String rpop(String key){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.rpop(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key從一個list的尾部刪除一個value並新增到另一個list的頭部,並返回該value</p> * <p>如果第一個list為空或者不存在則返回null</p> * @param srckey * @param dstkey * @return */ public String rpoplpush(String srckey, String dstkey){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.rpoplpush(srckey, dstkey); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取list中指定下標位置的value</p> * @param key * @param index * @return 如果沒有返回null */ public String lindex(String key,long index){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.lindex(key, index); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回list的長度</p> * @param key * @return */ public Long llen(String key){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.llen(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取list指定下標位置的value</p> * <p>如果start 為 0 end 為 -1 則返回全部的list中的value</p> * @param key * @param start * @param end * @return */ public List<String> lrange(String key,long start,long end){ Jedis jedis = null; List<String> res = null; try { jedis = pool.getResource(); res = jedis.lrange(key, start, end); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key向指定的set中新增value</p> * @param key * @param members 可以是一個String 也可以是一個String陣列 * @return 新增成功的個數 */ public Long sadd(String key,String...members){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.sadd(key, members); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key刪除set中對應的value值</p> * @param key * @param members 可以是一個String 也可以是一個String陣列 * @return 刪除的個數 */ public Long srem(String key,String...members){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.srem(key, members); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key隨機刪除一個set中的value並返回該值</p> * @param key * @return */ public String spop(String key){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.spop(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取set中的差集</p> * <p>以第一個set為標準</p> * @param keys 可以使一個string 則返回set中所有的value 也可以是string陣列 * @return */ public Set<String> sdiff(String...keys){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.sdiff(keys); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取set中的差集並存入到另一個key中</p> * <p>以第一個set為標準</p> * @param dstkey 差集存入的key * @param keys 可以使一個string 則返回set中所有的value 也可以是string陣列 * @return */ public Long sdiffstore(String dstkey,String... keys){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.sdiffstore(dstkey, keys); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取指定set中的交集</p> * @param keys 可以使一個string 也可以是一個string陣列 * @return */ public Set<String> sinter(String...keys){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.sinter(keys); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取指定set中的交集 並將結果存入新的set中</p> * @param dstkey * @param keys 可以使一個string 也可以是一個string陣列 * @return */ public Long sinterstore(String dstkey,String...keys){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.sinterstore(dstkey, keys); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回所有set的並集</p> * @param keys 可以使一個string 也可以是一個string陣列 * @return */ public Set<String> sunion(String... keys){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.sunion(keys); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回所有set的並集,並存入到新的set中</p> * @param dstkey * @param keys 可以使一個string 也可以是一個string陣列 * @return */ public Long sunionstore(String dstkey,String...keys){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.sunionstore(dstkey, keys); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key將set中的value移除並新增到第二個set中</p> * @param srckey 需要移除的 * @param dstkey 新增的 * @param member set中的value * @return */ public Long smove(String srckey, String dstkey, String member){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.smove(srckey, dstkey, member); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取set中value的個數</p> * @param key * @return */ public Long scard(String key){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.scard(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key判斷value是否是set中的元素</p> * @param key * @param member * @return */ public Boolean sismember(String key,String member){ Jedis jedis = null; Boolean res = null; try { jedis = pool.getResource(); res = jedis.sismember(key, member); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取set中隨機的value,不刪除元素</p> * @param key * @return */ public String srandmember(String key){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.srandmember(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取set中所有的value</p> * @param key * @return */ public Set<String> smembers(String key){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.smembers(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key向zset中新增value,score,其中score就是用來排序的</p> * <p>如果該value已經存在則根據score更新元素</p> * @param key * @param scoreMembers * @return */ public Long zadd(String key,Map<Double, String> scoreMembers){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zadd(key, scoreMembers); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key向zset中新增value,score,其中score就是用來排序的</p> * <p>如果該value已經存在則根據score更新元素</p> * @param key * @param score * @param member * @return */ public Long zadd(String key,double score,String member){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zadd(key, score, member); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key刪除在zset中指定的value</p> * @param key * @param members 可以使一個string 也可以是一個string陣列 * @return */ public Long zrem(String key,String...members){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zrem(key, members); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key增加該zset中value的score的值</p> * @param key * @param score * @param member * @return */ public Double zincrby(String key ,double score ,String member){ Jedis jedis = null; Double res = null; try { jedis = pool.getResource(); res = jedis.zincrby(key, score, member); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回zset中value的排名</p> * <p>下標從小到大排序</p> * @param key * @param member * @return */ public Long zrank(String key,String member){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zrank(key, member); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回zset中value的排名</p> * <p>下標從大到小排序</p> * @param key * @param member * @return */ public Long zrevrank(String key,String member){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zrevrank(key, member); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key將獲取score從start到end中zset的value</p> * <p>socre從大到小排序</p> * <p>當start為0 end為-1時返回全部</p> * @param key * @param start * @param end * @return */ public Set<String> zrevrange(String key ,long start ,long end){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.zrevrange(key, start, end); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回指定score內zset中的value</p> * @param key * @param max * @param min * @return */ public Set<String> zrangebyscore(String key,String max,String min){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.zrevrangeByScore(key, max, min); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回指定score內zset中的value</p> * @param key * @param max * @param min * @return */ public Set<String> zrangeByScore(String key ,double max,double min){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.zrevrangeByScore(key,max,min); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>返回指定區間內zset中value的數量</p> * @param key * @param min * @param max * @return */ public Long zcount(String key,String min,String max){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zcount(key, min, max); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key返回zset中的value個數</p> * @param key * @return */ public Long zcard(String key){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zcard(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key獲取zset中value的score值</p> * @param key * @param member * @return */ public Double zscore(String key,String member){ Jedis jedis = null; Double res = null; try { jedis = pool.getResource(); res = jedis.zscore(key, member); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key刪除給定區間內的元素</p> * @param key * @param start * @param end * @return */ public Long zremrangeByRank(String key ,long start, long end){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zremrangeByRank(key, start, end); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key刪除指定score內的元素</p> * @param key * @param start * @param end * @return */ public Long zremrangeByScore(String key,double start,double end){ Jedis jedis = null; Long res = null; try { jedis = pool.getResource(); res = jedis.zremrangeByScore(key, start, end); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>返回滿足pattern表示式的所有key</p> * <p>keys(*)</p> * <p>返回所有的key</p> * @param pattern * @return */ public Set<String> keys(String pattern){ Jedis jedis = null; Set<String> res = null; try { jedis = pool.getResource(); res = jedis.keys(pattern); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * <p>通過key判斷值得型別</p> * @param key * @return */ public String type(String key){ Jedis jedis = null; String res = null; try { jedis = pool.getResource(); res = jedis.type(key); } catch (Exception e) { pool.returnBrokenResource(jedis); e.printStackTrace(); } finally { returnResource(pool, jedis); } return res; } /** * 返還到連線池 * * @param pool * @param redis */ public static void returnResource(JedisPool pool, Jedis jedis) { if (jedis != null) { pool.returnResource(jedis); } } }