<dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
package om.xbq.redis; import java.util.List; import java.util.Set; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * Jedis工具類 * @author xbq * @created:2017-4-19 */ public class JedisUtil { private JedisPool pool; private static String URL = "192.168.242.130"; private static int PORT = 6379; private static String PASSWORD = "xbq123"; // ThreadLocal,給每一個線程 都弄一份 本身的資源 private final static ThreadLocal<JedisPool> threadPool = new ThreadLocal<JedisPool>(); private final static ThreadLocal<Jedis> threadJedis = new ThreadLocal<Jedis>(); private final static int MAX_TOTAL = 100; // 最大分配實例 private final static int MAX_IDLE = 50; // 最大空閒數 private final static int MAX_WAIT_MILLIS = -1; // 最大等待數 /** * 獲取 jedis池 * @return */ public JedisPool getPool(){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // 控制一個pool可分配多少個jedis實例,經過pool.getResource()來獲取,若是賦值爲-1,則表示不限制; // 若是pool已經分配了maxActive個jedis實例,則此時pool的狀態爲exhausted(耗盡) jedisPoolConfig.setMaxTotal(MAX_TOTAL); // 控制一個pool最多有多少個狀態爲idle(空閒的)的jedis實例 jedisPoolConfig.setMaxIdle(MAX_IDLE); // 表示當borrow(引入)一個jedis實例時,最大的等待時間,若是超過等待時間,則直接拋出JedisConnectionException jedisPoolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS); final int timeout = 60 * 1000; pool = new JedisPool(jedisPoolConfig, URL, PORT, timeout); return pool; } /** * 在jedis池中 獲取 jedis * @return */ private Jedis common(){ // 從 threadPool中取出 jedis鏈接池 pool = threadPool.get(); // 爲空,則從新產生 jedis鏈接池 if(pool == null){ pool = this.getPool(); // 將jedis鏈接池維護到threadPool中 threadPool.set(pool); } // 在threadJedis中獲取jedis實例 Jedis jedis = threadJedis.get(); // 爲空,則在jedis鏈接池中取出一個 if(jedis == null){ jedis = pool.getResource(); // 驗證密碼 jedis.auth(PASSWORD); // 將jedis實例維護到threadJedis中 threadJedis.set(jedis); } return jedis; } /** * 釋放資源 */ public void closeAll(){ Jedis jedis = threadJedis.get(); if(jedis != null){ threadJedis.set(null); JedisPool pool = threadPool.get(); if(pool != null){ // 釋放鏈接,歸還給鏈接池 pool.returnResource(jedis); } } } /** * 判斷key是否存在 * @param key * @return */ public boolean existsKey(String key){ Jedis jedis = this.common(); return jedis.exists(key); } /** * 刪除 * @param key * @return */ public Long delValue(String key){ Jedis jedis = this.common(); return jedis.del(key); } // ----------------------------對String類型的操做----------------------------------------- /** * 增長 修改 * @param key * @param value */ public String setValue(String key, String value) { Jedis jedis = this.common(); return jedis.set(key, value); } /** * 查詢 * @param key * @return */ public String getValue(String key){ Jedis jedis = this.common(); return jedis.get(key); } /** * 追加數據 * @param key * @param value */ public void appendValue(String key, String value){ Jedis jedis = this.common(); jedis.append(key, value); } /** * 測試 String */ @Test public void testString(){ if(this.existsKey("name")){ System.out.println("這一個key存在了!"); this.appendValue("name", "xbq6666"); String name = this.getValue("name"); System.out.println("name===" + name); long flag = this.delValue("name"); System.out.println(flag); }else { this.setValue("name", "javaCoder"); String name = this.getValue("name"); System.out.println("name===" + name); } } // ----------------------------對List類型的操做------------------------------------------ /** * 保存到鏈表 * @param key * @param keys * @return */ public long lpush(String key, String ...keys){ Jedis jedis = this.common(); return jedis.lpush(key, keys); } /** * 取出鏈表中的所有元素 * @param key * @return */ public List<String> lrange(String key) { Jedis jedis = this.common(); return jedis.lrange(key, 0, -1); } /** * 查詢出鏈表中的元素個數 * @param key * @return */ public long llen(String key){ Jedis jedis = this.common(); return jedis.llen(key); } /** * 取出鏈表中的頭部元素 * @param key * @return */ public String lpop(String key){ Jedis jedis = this.common(); return jedis.lpop(key); } // ----------------------------對Hash類型的操做------------------------------------------ /** * 添加 * @param key * @param field * @param value * @return */ public long hset(String key, String field, String value) { Jedis jedis = this.common(); return jedis.hset(key, field, value); } /** * 查詢 * @param key * @param field * @return */ public String hget(String key, String field){ Jedis jedis = this.common(); return jedis.hget(key, field); } /** * 判斷 key 中的field 是否存在 * @param key * @param field * @return */ public boolean hexists(String key, String field){ Jedis jedis = this.common(); return jedis.hexists(key, field); } /** * 刪除 * @param key * @param fields * @return */ public long hdel(String key, String ...fields){ Jedis jedis = this.common(); return jedis.hdel(key, fields); } // ----------------------------對Set類型的操做-------------------------------------------- /** * 添加元素 * @param key * @param members * @return */ public long sadd(String key, String ...members){ Jedis jedis = this.common(); return jedis.sadd(key, members); } /** * 查詢出set中的全部元素 * @param key * @return */ public Set<String> sMember(String key){ Jedis jedis = this.common(); return jedis.smembers(key); } /** * 查詢出 set中元素的個數 * @param key * @return */ public long scard(String key){ Jedis jedis = this.common(); return jedis.scard(key); } // ----------------------------對ZSet類型的操做-------------------------------------------- /** * 在zset中添加元素 * @param key * @param score * @param member * @return */ public long zadd(String key, double score ,String member){ Jedis jedis = this.common(); return jedis.zadd(key, score, member); } /** * 查詢全部元素 * @param key * @return */ public Set<String> zrange(String key){ Jedis jedis = this.common(); return jedis.zrange(key, 0, -1); } /** * 查詢zset中的元素個數 * @param key * @return */ public long zcard(String key){ Jedis jedis = this.common(); return jedis.zcard(key); } /** * 刪除zset中的一個 或者多個元素 * @param key * @param members * @return */ public long zrem(String key, String ...members){ Jedis jedis = this.common(); return jedis.zrem(key, members); } }