1. 程式人生 > >jedis使用api(java redis開發指南)

jedis使用api(java redis開發指南)

http://www.cnblogs.com/vinozly/p/5459498.html

Jedis 是 Redis 官方首選的 Java 客戶端開發包。

工作過程總結的一個示例,貼出來,如下:

複製程式碼
package com.wujintao.redis;  
  
import java.util.Date;  
import java.util.HashMap;  
import java.util.Iterator;  
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.Pipeline; import redis.clients.jedis.SortingParams; import com.wujintao.redis.util.RedisUtil; public class TestCase { /** * 在不同的執行緒中使用相同的Jedis例項會發生奇怪的錯誤。但是建立太多的實現也不好因為這意味著會建立很多sokcet連線, * 也會導致奇怪的錯誤發生。單一Jedis例項不是執行緒安全的。為了避免這些問題,可以使用JedisPool, * JedisPool是一個執行緒安全的網路連線池。可以用JedisPool建立一些可靠Jedis例項,可以從池中拿到Jedis的例項。 * 這種方式可以解決那些問題並且會實現高效的效能
*/ public static void main(String[] args) { // ...when closing your application: RedisUtil.getPool().destroy(); } public static void Hello() { Jedis jedis = RedisUtil.getJedis(); try { // 向key-->name中放入了value-->minxr
jedis.set("name", "minxr"); String ss = jedis.get("name"); System.out.println(ss); // 很直觀,類似map 將jintao append到已經有的value之後 jedis.append("name", "jintao"); ss = jedis.get("name"); System.out.println(ss); // 2、直接覆蓋原來的資料 jedis.set("name", "jintao"); System.out.println(jedis.get("jintao")); // 刪除key對應的記錄 jedis.del("name"); System.out.println(jedis.get("name"));// 執行結果:null /** * mset相當於 jedis.set("name","minxr"); jedis.set("jarorwar","aaa"); */ jedis.mset("name", "minxr", "jarorwar", "aaa"); System.out.println(jedis.mget("name", "jarorwar")); } catch (Exception e) { e.printStackTrace(); } finally { RedisUtil.getPool().returnResource(jedis); } } private void testKey() { Jedis jedis = RedisUtil.getJedis(); System.out.println("=============key=========================="); // 清空資料 System.out.println(jedis.flushDB()); System.out.println(jedis.echo("foo")); // 判斷key否存在 System.out.println(jedis.exists("foo")); jedis.set("key", "values"); System.out.println(jedis.exists("key")); } public static void testString() { System.out.println("==String=="); Jedis jedis = RedisUtil.getJedis(); try { // String jedis.set("key", "Hello World!"); String value = jedis.get("key"); System.out.println(value); } catch (Exception e) { e.printStackTrace(); } finally { RedisUtil.getPool().returnResource(jedis); } System.out.println("=============String=========================="); // 清空資料 System.out.println(jedis.flushDB()); // 儲存資料 jedis.set("foo", "bar"); System.out.println(jedis.get("foo")); // 若key不存在,則儲存 jedis.setnx("foo", "foo not exits"); System.out.println(jedis.get("foo")); // 覆蓋資料 jedis.set("foo", "foo update"); System.out.println(jedis.get("foo")); // 追加資料 jedis.append("foo", " hello, world"); System.out.println(jedis.get("foo")); // 設定key的有效期,並存儲資料 jedis.setex("foo", 2, "foo not exits"); System.out.println(jedis.get("foo")); try { Thread.sleep(3000); } catch (InterruptedException e) { } System.out.println(jedis.get("foo")); // 獲取並更改資料 jedis.set("foo", "foo update"); System.out.println(jedis.getSet("foo", "foo modify")); // 擷取value的值 System.out.println(jedis.getrange("foo", 1, 3)); System.out.println(jedis.mset("mset1", "mvalue1", "mset2", "mvalue2", "mset3", "mvalue3", "mset4", "mvalue4")); System.out.println(jedis.mget("mset1", "mset2", "mset3", "mset4")); System.out.println(jedis.del(new String[] { "foo", "foo1", "foo3" })); } public static void testList() { System.out.println("==List=="); Jedis jedis = RedisUtil.getJedis(); try { // 開始前,先移除所有的內容 jedis.del("messages"); jedis.rpush("messages", "Hello how are you?"); jedis.rpush("messages", "Fine thanks. I'm having fun with redis."); jedis.rpush("messages", "I should look into this NOSQL thing ASAP"); // 再取出所有資料jedis.lrange是按範圍取出, // 第一個是key,第二個是起始位置,第三個是結束位置,jedis.llen獲取長度 -1表示取得所有 List<String> values = jedis.lrange("messages", 0, -1); System.out.println(values); } catch (Exception e) { e.printStackTrace(); } finally { RedisUtil.getPool().returnResource(jedis); } // 清空資料 System.out.println(jedis.flushDB()); // 新增資料 jedis.lpush("lists", "vector"); jedis.lpush("lists", "ArrayList"); jedis.lpush("lists", "LinkedList"); // 陣列長度 System.out.println(jedis.llen("lists")); // 排序 System.out.println(jedis.sort("lists")); // 字串 System.out.println(jedis.lrange("lists", 0, 3)); // 修改列表中單個值 jedis.lset("lists", 0, "hello list!"); // 獲取列表指定下標的值 System.out.println(jedis.lindex("lists", 1)); // 刪除列表指定下標的值 System.out.println(jedis.lrem("lists", 1, "vector")); // 刪除區間以外的資料 System.out.println(jedis.ltrim("lists", 0, 1)); // 列表出棧 System.out.println(jedis.lpop("lists")); // 整個列表值 System.out.println(jedis.lrange("lists", 0, -1)); } public static void testSet() { System.out.println("==Set=="); Jedis jedis = RedisUtil.getJedis(); try { jedis.sadd("myset", "1"); jedis.sadd("myset", "2"); jedis.sadd("myset", "3"); jedis.sadd("myset", "4"); Set<String> setValues = jedis.smembers("myset"); System.out.println(setValues); // 移除noname jedis.srem("myset", "4"); System.out.println(jedis.smembers("myset"));// 獲取所有加入的value System.out.println(jedis.sismember("myset", "4"));// 判斷 minxr // 是否是sname集合的元素 System.out.println(jedis.scard("sname"));// 返回集合的元素個數 } catch (Exception e) { e.printStackTrace(); } finally { RedisUtil.getPool().returnResource(jedis); } // 清空資料 System.out.println(jedis.flushDB()); // 新增資料 jedis.sadd("sets", "HashSet"); jedis.sadd("sets", "SortedSet"); jedis.sadd("sets", "TreeSet"); // 判斷value是否在列表中 System.out.println(jedis.sismember("sets", "TreeSet")); ; // 整個列表值 System.out.println(jedis.smembers("sets")); // 刪除指定元素 System.out.println(jedis.srem("sets", "SortedSet")); // 出棧 System.out.println(jedis.spop("sets")); System.out.println(jedis.smembers("sets")); // jedis.sadd("sets1", "HashSet1"); jedis.sadd("sets1", "SortedSet1"); jedis.sadd("sets1", "TreeSet"); jedis.sadd("sets2", "HashSet2"); jedis.sadd("sets2", "SortedSet1"); jedis.sadd("sets2", "TreeSet1"); // 交集 System.out.println(jedis.sinter("sets1", "sets2")); // 並集 System.out.println(jedis.sunion("sets1", "sets2")); // 差集 System.out.println(jedis.sdiff("sets1", "sets2")); } public static void sortedSet() { System.out.println("==SoretedSet=="); Jedis jedis = RedisUtil.getJedis(); try { jedis.zadd("hackers", 1940, "Alan Kay"); jedis.zadd("hackers", 1953, "Richard Stallman"); jedis.zadd("hackers", 1965, "Yukihiro Matsumoto"); jedis.zadd("hackers", 1916, "Claude Shannon"); jedis.zadd("hackers", 1969, "Linus Torvalds"); jedis.zadd("hackers", 1912, "Alan Turing"); Set<String> setValues = jedis.zrange("hackers", 0, -1); System.out.println(setValues); Set<String> setValues2 = jedis.zrevrange("hackers", 0, -1); System.out.println(setValues2); } catch (Exception e) { e.printStackTrace(); } finally { RedisUtil.getPool().returnResource(jedis); } // 清空資料 System.out.println(jedis.flushDB()); // 新增資料 jedis.zadd("zset", 10.1, "hello"); jedis.zadd("zset", 10.0, ":"); jedis.zadd("zset", 9.0, "zset"); jedis.zadd("zset", 11.0, "zset!"); // 元素個數 System.out.println(jedis.zcard("zset")); // 元素下標 System.out.println(jedis.zscore("zset", "zset")); // 集合子集 System.out.println(jedis.zrange("zset", 0, -1)); // 刪除元素 System.out.println(jedis.zrem("zset", "zset!")); System.out.println(jedis.zcount("zset", 9.5, 10.5)); // 整個集合值 System.out.println(jedis.zrange("zset", 0, -1)); } public static void testHsh() { System.out.println("==Hash=="); Jedis jedis = RedisUtil.getJedis(); try { Map<String, String> pairs = new HashMap<String, String>(); pairs.put("name", "Akshi"); pairs.put("age", "2"); pairs.put("sex", "Female"); jedis.hmset("kid", pairs); List<String> name = jedis.hmget("kid", "name");// 結果是個泛型的LIST // jedis.hdel("kid","age"); //刪除map中的某個鍵值 System.out.println(jedis.hmget("kid", "pwd")); // 因為刪除了,所以返回的是null System.out.println(jedis.hlen("kid")); // 返回key為user的鍵中存放的值的個數 System.out.println(jedis.exists("kid"));// 是否存在key為user的記錄 System.out.println(jedis.hkeys("kid"));// 返回map物件中的所有key System.out.println(jedis.hvals("kid"));// 返回map物件中的所有value Iterator<String> iter = jedis.hkeys("kid").iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + jedis.hmget("kid", key)); } List<String> values = jedis.lrange("messages", 0, -1); values = jedis.hmget("kid", new String[] { "name", "age", "sex" }); System.out.println(values); Set<String> setValues = jedis.zrange("hackers", 0, -1); setValues = jedis.hkeys("kid"); System.out.println(setValues); values = jedis.hvals("kid"); System.out.println(values); pairs = jedis.hgetAll("kid"); System.out.println(pairs); } catch (Exception e) { e.printStackTrace(); } finally { RedisUtil.getPool().returnResource(jedis); } // 清空資料 System.out.println(jedis.flushDB()); // 新增資料 jedis.hset("hashs", "entryKey", "entryValue"); jedis.hset("hashs", "entryKey1", "entryValue1"); jedis.hset("hashs", "entryKey2", "entryValue2"); // 判斷某個值是否存在 System.out.println(jedis.hexists("hashs", "entryKey")); // 獲取指定的值 System.out.println(jedis.hget("hashs", "entryKey")); // 批量獲取指定的值 System.out.println(jedis.hmget("hashs", "entryKey", "entryKey1")); // 刪除指定的值 System.out.println(jedis.hdel("hashs", "entryKey")); // 為key中的域 field 的值加上增量 increment System.out.println(jedis.hincrBy("hashs", "entryKey", 123l)); // 獲取所有的keys System.out.println(jedis.hkeys("hashs")); // 獲取所有的values System.out.println(jedis.hvals("hashs")); } public static void testOther() throws InterruptedException { Jedis jedis = RedisUtil.getJedis(); try { // keys中傳入的可以用萬用字元 System.out.println(jedis.keys("*")); // 返回當前庫中所有的key [sose, sanme, // name, jarorwar, foo, // sname, java framework, // user, braand] System.out.println(jedis.keys("*name"));// 返回的sname [sname, name] System.out.println(jedis.del("sanmdde"));// 刪除key為sanmdde的物件 刪除成功返回1 // 刪除失敗(或者不存在)返回 0 System.out.println(jedis.ttl("sname"));// 返回給定key的有效時間,如果是-1則表示永遠有效 jedis.setex("timekey", 10, "min");// 通過此方法,可以指定key的存活(有效時間) 時間為秒 Thread.sleep(5000);// 睡眠5秒後,剩餘時間將為<=5 System.out.println(jedis.ttl("timekey")); // 輸出結果為5 jedis.setex("timekey", 1, "min"); // 設為1後,下面再看剩餘時間就是1了 System.out.println(jedis.ttl("timekey")); // 輸出結果為1 System.out.println(jedis.exists("key"));// 檢查key是否存在 System.out.println(jedis.rename("timekey", "time")); System.out.println(jedis.get("timekey"));// 因為移除,返回為null System.out.println(jedis.get("time")); // 因為將timekey 重新命名為time // 所以可以取得值 min // jedis 排序 // 注意,此處的rpush和lpush是List的操作。是一個雙向連結串列(但從表現來看的) jedis.del("a");// 先清除資料,再加入資料進行測試 jedis.rpush("a", "1"); jedis.lpush("a", "6"); jedis.lpush("a", "3"); jedis.lpush("a", "9"); System.out.println(jedis.lrange("a", 0, -1));// [9, 3, 6, 1] System.out.println(jedis.sort("a")); // [1, 3, 6, 9] //輸入排序後結果 System.out.println(jedis.lrange("a", 0, -1)); } catch (Exception e) { e.printStackTrace(); } finally { RedisUtil.getPool().returnResource(jedis); } } @org.junit.Test public void testUnUsePipeline() { long start = new Date().getTime(); Jedis jedis = RedisUtil.getJedis(); for (int i = 0; i < 10000; i++) { jedis.set("age1" + i, i + ""); jedis.get("age1" + i);// 每個操作都發送請求給redis-server } long end = new Date().getTime(); System.out.println("unuse pipeline cost:" + (end - start) + "ms"