1 /** 2 * List類型是按照插入順序排序的字符串鏈表。和數據結構中的普通鏈表同樣。咱們能夠在其頭部(left)和尾部(right)添加新的元素。 3 * 在插入時,若是該鍵並不存在,Redis將爲該鍵建立一個新的鏈表。與此相反,若是鏈表中全部的元素均被移除,那麼該鍵也將會被從數據庫中刪除 4 * @throws Exception 5 */ 6 @Test 7 public void testList() throws Exception { 8 //在指定Key所關聯的List Value的頭部插入參數中給出的全部Values,返回插入的value值的個數 9 Long lpushResult = jedis.lpush("lmykey", "a","b","c","d");//插入順序是先插入a,而後插入b,以後插入c,最後插入c 10 System.out.println(lpushResult);//[d,c,b,a] 11 12 //取從位置0開始到位置2結束的3個元素。 13 List<String> lrangeResult = jedis.lrange("lmykey", 0, 2);//[d, c, b] 14 15 //取鏈表中的所有元素,其中0表示第一個元素,-1表示最後一個元素。 16 List<String> lrangeResult1 = jedis.lrange("lmykey", 0, -1);//[d, c, b, a] 17 18 //插入元素,至關於追加。lmykey2鍵此時並不存在,所以該命令將不會進行任何操做,其返回值爲0。 19 Long lrangeRestult = jedis.lpushx("lmykey2", "e");//0 20 21 //mykey鍵此時已經存在,因此該命令插入成功,並返回鏈表中當前元素的數量。 22 Long lrangeResult2 = jedis.lpushx("lmykey", "e");//5 23 24 //獲取該鍵的頭部元素 25 System.out.println(jedis.lrange("lmykey", 0, 0));;//[e] 26 27 28 //=======================> 29 //插入元素 30 jedis.lpush("lmykey2", "a","b","c","d"); 31 32 //彈出一個元素,返回彈出的那個元素 33 String lrangeResult4 = jedis.lpop("lmykey2");//d 34 35 //在執行lpop命令1次後,鏈表頭部的1個元素已經被彈出,此時鏈表中元素的數量是3 36 //計算鏈表還有幾個元素 37 Long lrangeResult5 = jedis.llen("lmykey2");//3 38 39 40 //=========》 41 jedis.lpush("lmykey3", "a","b","c","d","a","c"); 42 43 //從頭部(left)向尾部(right)變量鏈表,刪除2個值等於a的元素,返回值爲實際刪除的數量。 44 Long lrangeResult6 = jedis.lrem("lmykey3", 2, "a");//2 45 46 System.out.println(jedis.lrange("lmykey3", 0, -1));;//[c, d, c, b] 47 48 //獲取索引值爲1(頭部的第二個元素)的元素值. 索引是從0開始計數的 49 String lindexValue = jedis.lindex("lmykey3", 1);//d 50 51 //索引值6超過了鏈表中元素的數量,該命令返回null。 52 String lindexValue7 = jedis.lindex("lmykey3", 6);//null 53 54 //將索引值爲1(頭部的第二個元素)的元素值設置爲新值e。 若是成功,返回值爲ok。 55 String lset = jedis.lset("lmykey3", 1, "e");//ok 56 57 //查看是否設置成功 58 System.out.println(jedis.lindex("lmykey3", 1));// 59 60 List<String> lrange = jedis.lrange("lmykey3", 0, -1);//[c, e, c, b] 61 62 //設置的索引值6超過了鏈表中元素的數量,設置失敗,該命令返回錯誤信息 63 String lset8 = jedis.lset("lmykey3", 6, "hh"); 64 //錯誤信息爲:redis.clients.jedis.exceptions.JedisDataException: ERR index out of range 65 66 //僅保留索引值0到2之間的3個元素,注意第0個和第2個元素均被保留。 67 String ltrim = jedis.ltrim("lmykey3", 0, 2); 68 System.out.println(jedis.lrange("lmykey3", 0, -1));//[c, e, c] 69 70 //=======================> 71 jedis.lpush("lmykey4", "a","b","c","d"); 72 //在a的前面插入新元素a1。 73 Long linsert = jedis.linsert("lmykey4", LIST_POSITION.BEFORE, "a", "a1"); 74 System.out.println(jedis.lrange("lmykey4", 0, -1));//[d, c, b, a1, a] 75 76 //在a的後面插入新元素a1,從返回結果表示插入以後該鏈表一共有幾個元素。若是在不存在的元素以前或以後插入新元素,該命令操做失敗,並返回-1。 77 Long linsert9 = jedis.linsert("lmykey4", LIST_POSITION.AFTER, "a", "a1"); 78 System.out.println(linsert9);//6 79 System.out.println(jedis.lrange("lmykey4", 0, -1));//[d, c, b, a1, a, a1] 80 81 //爲不存在的Key插入新元素,該命令操做失敗,返回0。 82 Long linsert10 = jedis.linsert("lmykey123", LIST_POSITION.AFTER, "a", "a2"); 83 System.out.println(linsert10);//0 84 85 86 //========>> 87 //從鏈表的尾部插入參數中給出的values,插入順序是從右到左依次插入。 88 jedis.rpush("rmykey", "a","b","c","d"); 89 System.out.println(jedis.lrange("rmykey", 0, -1));//[a, b, c, d] 90 91 //該鍵已經存在而且包含4個元素,rpushx命令將執行成功,並將元素e插入到鏈表的尾部,返回插入成功以後該鏈表總共有幾個元素。 92 Long rpushx = jedis.rpushx("rmykey", "e"); 93 System.out.println(jedis.lrange("rmykey", 0, -1));//[a, b, c, d, e] 94 95 //因爲rmykey2鍵並不存在,所以該命令不會插入數據,其返回值爲0。 96 Long rpushx11 = jedis.rpushx("rmykey2", "e"); 97 System.out.println(rpushx11);//0 98 99 //將rmykey的尾部元素e彈出,同時再插入到rmykey2的頭部(原子性的完成這兩步操做)。 100 String rpoplpush = jedis.rpoplpush("rmykey", "rmykey2"); 101 System.out.println(rpoplpush);//e 102 System.out.println(jedis.lrange("rmykey", 0, -1));//[a, b, c, d] 103 System.out.println(jedis.lrange("rmykey2", 0, -1));//[e] 104 105 //將source和destination設爲同一鍵,將mykey中的尾部元素移到其頭部。 106 String rpoplpush12 = jedis.rpoplpush("rmykey", "rmykey"); 107 System.out.println(jedis.lrange("rmykey", 0, -1));//[d, a, b, c] 108 109 System.out.println("ok"); 110 //關閉鏈接 111 jedis.close(); 112 }