在redis入門及在商城案例中的使用中簡單介紹了下使用jedis如何操作redis,但是其實方法是跟redis的操作大部分是相對應的。我這里做下記錄
1、String類型操作 public class StringTest { Jedis jedis; @Before//該注解下的方法在@Test執行之前執行 public void before(){ //創建連接 jedis = new Jedis("192.168.25.128",6379); } @After//該注解下的方法在@Test執行之后執行 public void after(){ //關閉連接 jedis.close(); } /* * 存儲,獲取,設置過期時間,key命令 */ @Test public void test() throws InterruptedException{ //1.存儲值 jedis.set("name", "張三"); //2.取值 String name = jedis.get("name"); System.out.println(name); //3.key命令:查看有效期,-1表示持久化 Long t = jedis.ttl("name"); System.out.println(t); //4.key命令,對已經存在的key設置過期時間 jedis.expire("name", 5); while(true){ String name2 = jedis.get("name"); System.out.println(name2); System.out.println("有效期為:"+jedis.ttl("name")+"秒"); Thread.sleep(2000); } } 輸出結果: 張三 -1 ------------------- 張三 有效期為:5秒 張三 有效期為:3秒 張三 有效期為:1秒 null 有效期為:-2秒 /* * 測試自增自減:前提,value值能解析為數字類型 * 刪除 */ @Test public void test2(){ jedis.set("age", "18"); String age1 = jedis.get("age"); System.out.println("當前年齡:"+age1); Long age2 = jedis.decr("age"); System.out.println("一年前年齡為:"+age2); Long age3 = jedis.incr("age"); System.out.println("現在年齡又變回為:"+age3); //如果key不存在則忽略此操作 Long del = jedis.del("age1"); } 輸出結果: 當前年齡:18 一年前年齡為:17 現在年齡又變回為:18 /* * 批量存儲和獲取 */ @Test public void test3(){ jedis.mset("a1","mysql","a2","oracle","a3","sqlServer","a4", "redis","a5","mongodb","a6","hbase"); List list = jedis.mget("a1","a2","a3","a4","a5","a6"); for (String s : list) { System.out.println(s); } } 輸出結果: mysql oracle sqlServer redis mongodb hbase /* * 存儲值的同時設置過期時間,判斷key是否存在 */ @Test public void test4() throws InterruptedException{ //jedis.setex(key, 過期時間, value) jedis.setex("life", 5, "享受美好"); while(jedis.exists("life")){ System.out.println(jedis.get("life")); Thread.sleep(2000); } } 輸出結果:在輸出三個“享受美好”之后便不再輸出 享受美好 享受美好 享受美好 2、Hash類型操作 public class MapTest { Jedis jedis; @Before public void before(){ jedis = new Jedis("192.168.25.128",6379); } @After public void after(){ jedis.close(); } @Test public void test1(){ //1.存儲值 jedis.hset("student", "name", "小李"); jedis.hset("student", "class", "小學生"); jedis.hset("student", "age", "10"); jedis.hset("student", "skill", "keng"); //2.獲取指定值 獲取名字 String name = jedis.hget("student", "name"); System.out.println(name); System.out.println("----------------------"); //3.獲取存儲的map Map<string, string=""> all = jedis.hgetAll("student"); Set<entry<string,string>> set = all.entrySet(); Iterator<entry<string, string="">> iterator = set.iterator(); while (iterator.hasNext()) { Entry<string, string=""> entry = iterator.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println(key+":"+value); } System.out.println("------------------------------"); //4.獲取map中全部key Set keySet = jedis.hkeys("student"); for (String key : keySet) { System.out.println(key); } System.out.println("-------------------------------"); //5.獲取map中全部values List list = jedis.hvals("student"); for (String value : list) { System.out.println(value); } System.out.println("------------------"); //6.刪除指定的值 刪除map中class,name兩對鍵值對 Long long1 = jedis.hdel("student", "class","name"); Set set2 = jedis.hkeys("student"); for (String key : set2) { System.out.println(key); } System.out.println("-------------------"); //7.判斷map是否存在 Boolean e = jedis.hexists("student", "class"); System.out.println("class是否存在:"+e); System.out.println("-----------------"); //8.自增自減,可以指定增加減少的數值 jedis.hincrBy("student", "age", 2); System.out.println(jedis.hget("student", "age")); } } 輸出結果: 小李 ---------------------- skill:keng name:小李 class:小學生 age:10 ------------------------------ name class age skill ------------------------------- 10 keng 小李 小學生 ------------------ age skill ------------------- class是否存在:false ----------------- 2年后年齡為:12 String跟Hash是最常見的類型,在實習這段時間也都只用到這兩種,所以我覺得不管怎樣這兩種至少應該掌握。 3、List類型操作 public class ListTest { Jedis jedis; @Before public void before(){ jedis = new Jedis("192.168.25.128",6379); } @After public void after(){ jedis.close(); } @Test public void test(){ //1.存儲值(左邊開始)。當成棧(子彈匣),先進先出,入棧 jedis.lpush("scores", "100","90","80","70","60"); //右邊開始存 jedis.rpush("scores", "50","40","30","20","10"); //2.取值(左邊開始),可以說是同時移除了該值,出棧 String lv = jedis.lpop("scores"); //右邊開始取 String rv= jedis.rpop("scores"); System.out.println("左邊取為:"+lv); System.out.println("右邊取為:"+rv); System.out.println("--------------------"); //3.取所有值(只有左邊開始取)0 -1表示取所有位置,位置是[start,end] //redis命令行操作的時候已經演示過 List list = jedis.lrange("scores", 0, -1); for (String value : list) { System.out.println(value); } System.out.println("-----------"); //4.插隊,44插入到100后面,注:沒有什么rinsert()方法 jedis.linsert("scores",BinaryClient.LIST_POSITION .AFTER, "100", "44"); List list2 = jedis.lrange("scores", 0, -1); for (String value : list2) { System.out.println(value); } List list3 = jedis.lrange("scores", 0, 3); for (String value : list3) { System.out.println(value); } } } 輸出結果: 左邊取為:60 右邊取為:10 -------------------- 70 80 90 100 50 40 30 20 ----------- 70 80 90 100 44 50 40 30 20 --------------- 70 80 90 100 4、Set類型操作 public class JedisTest { Jedis jedis; @Before public void before(){ jedis = new Jedis("192.168.25.128",6379); } @After public void after(){ jedis.close(); } /* * 測試添加,取值,移除,判斷 */ @Test public void test1(){ //1.存儲 jedis.sadd("names", "Tom","Jack","Harry","Lucy","laowang"); //2.獲取set中全部記錄,取出來的跟存儲的順序不一樣 Set members = jedis.smembers("names"); for (String member : members) { System.out.println(member); } //3.移除指定數據 jedis.srem("names","Tome","Jack"); //4.判斷某值是否為set中成員 Boolean tom = jedis.sismember("names", "Tome"); System.out.println("Tom在名單里嗎:"+tom); } 輸出結果: Jack Harry Lucy Tom laowang Tom在名單里嗎:false /* * 差集,交集,並集 */ @Test public void test2(){ jedis.sadd("set1", "a","b","c","d"); jedis.sadd("set2", "b","c","d","e"); //1.差集 set1中有set2中沒有的 Set sdiff = jedis.sdiff("set1","set2"); for (String d : sdiff) { System.out.println(d); } System.out.println("----------------"); //2.交集 Set sinter = jedis.sinter("set1","set2"); for (String in : sinter) { System.out.println(in); } System.out.println("----------------"); //3.並集 Set sunion = jedis.sunion("set1","set2"); for (String un : sunion) { System.out.println(un); } } 輸出結果: a ---------------- d c b ---------------- d e a c b 5、Zset(有序Set)類型操作 public class SortedSetTest { Jedis jedis; @Before public void before(){ jedis = new Jedis("192.168.25.128",6379); } @After public void after(){ jedis.close(); } @Test public void test1(){ //1.添加 jedis.zadd("table", 1, "a"); jedis.zadd("table", 3, "b"); jedis.zadd("table", 2, "c"); jedis.zadd("table", 5, "d"); jedis.zadd("table", 4, "e"); //2.取值 0 -1表示取所有,可以自己指定開始結束位置,跟list一樣 //默認根據分數由低到高排 Set table = jedis.zrange("table", 0, -1); for (String t : table) { System.out.println(t); } System.out.println("-----------------"); //3.排序,由高到低排 Set table2 = jedis.zrevrange("table", 0, -1); for (String t : table2) { System.out.println(t); } System.out.println("-----------------"); //4.修改某個值的分數 jedis.zincrby("table", 7, "a"); Set table3 = jedis.zrevrange("table", 0, -1); for (String t : table3) { System.out.println(t); } } } 輸出結果: a c b e d ----------------- d e b c a ----------------- a d e b c