天天看點

使用RedisTemplate緩存List的一系列操作示例

redisTemplate是Spring封裝的一個比較強大的模闆,友善在開發的時候操作redis緩存。

Redis緩存一般能存的類型有String、List、Set、Hash、Zset。

本篇主要介紹存List類型的相關操作

List常用操作

首先建立兩個list用來做後面得舉例操作,便于了解

List<String> list1 = new ArrayList<>();
        list1.add("1");
        list1.add("2");
        list1.add("3");
List<String> list2 = new ArrayList<>();
        list2.add("4");
        list2.add("5");
        list2.add("6");
           

對以上兩個list進行redis相關操作(常用操作)

// 往緩存資料右邊存儲資料
        // redisTemplate.opsForList().rightPush("testKey1",list1);
        redisTemplate.opsForList().rightPush("testKey2",list2);

        // 擷取緩存中得某區間得資料
        redisTemplate.opsForList().range("testKey1", 0, 0); // 擷取下标0~0的
        redisTemplate.opsForList().range("testKey1", 0, 1); // 擷取下标0~1的
        redisTemplate.opsForList().range("testKey1", 0, -1); // 擷取所有的

        // 當鍵存在的時候,同rightPush一樣存值到鍵下面(隻有在鍵存在才會更新keyName下的值,如果鍵不存在,不會對資料進行任何操作)
        redisTemplate.opsForList().rightPushIfPresent("testKey1", 1);

        // 擷取指定下标的元素:如果下标是-1,則傳回最後一個,下标越界則傳回null
        redisTemplate.opsForList().index("testKey1",-1);

        // 移除指定位置的資料:接收3個參數,分别是緩存的鍵名,計數事件,要移除的值。計數事件可以傳入的有三個值,分别是-1,0,1。
        // 計數事件傳-1表示:從存儲容器的最右邊開始,删除一個與要移除的值比對的資料;
        // 計數事件傳0表示:删除所有與傳入值比對的資料;
        // 計數事件傳1表示:從存儲容器的最左邊開始,删除一個與要移除的值比對的資料
        redisTemplate.opsForList().remove("testKey1",0,4);

        // rightPopAndLeftPush用于操作兩個鍵之間的資料,接受兩個參數,分别是源key、目标key。該函數會将源key進行rightPop,再将傳回的值,作為輸入參數,在目标key上進行leftPush。
        redisTemplate.opsForList().rightPushAll("testKey1",list1); // [1,2,3,4]
        redisTemplate.opsForList().rightPushAll("testKey2",list2); // [1,2,3]
        // 用rightPop取出keyName1中的4,然後用LeftPush将4放置在keyName2的左邊
        redisTemplate.opsForList().rightPopAndLeftPush("testKey1","testKey2");  // [4,1,2,3]

        // 擷取緩存的鍵的值的長度
        redisTemplate.opsForList().size("testKey1");

        // 判斷一個鍵是否存在
        Boolean flag = redisTemplate.hasKey("testKey2");

        // 删除緩存的鍵的值
        redisTemplate.delete("testKey1");
        redisTemplate.delete("testKey2");
           

詳細及其他操作:

1.判斷一個鍵是否存在

2.擷取緩存的指定區間資料

redisTemplate.opsForList().range("test", 0, 0));  // 擷取緩存的List從下标0到0的值
redisTemplate.opsForList().range("test", 0, 1));  // 擷取緩存的List從下标0到1的值
redisTemplate.opsForList().range("test", 0, -1));  // 擷取緩存的List所有的值
           

3.删除緩存中的某個鍵

4.擷取該鍵集合的長度

5.往緩存的資料的左邊存值

6.往緩存的資料的右邊存值

7.往緩存的左邊一次性的存list數組

8.往緩存右邊一次性的存list數組

9.當鍵存在的時候,同rightPush一樣存值到鍵下面 (隻有在鍵存在才會更新keyName下的值,如果鍵不存在,不會對資料進行任何操作)

10.當鍵存在的時候,同leftPush一樣存值到鍵下面 (隻有在鍵存在才會更新keyName下的值,如果鍵不存在,不會對資料進行任何操作)

11.移除redis中最右邊的一個元素 (當keyName中的元素被移除完,即傳回為空,那麼在redis中這個key也不存在了,這時候如果再去進行leftPush或者rightPush這類操作,是無法再添加資料的。)

12.移除redis中最左邊的一個元素 (當keyName中的元素被移除完,即傳回為空,那麼在redis中這個key也不存在了,這時候如果再去進行leftPush或者rightPush這類操作,是無法再添加資料的。)

13.擷取list中指定位置的元素 (如果下标是-1,則傳回list的最後一個元素;如果下标越界,則傳回null)

14.截取指定區間的元素 (與range不同,range是擷取指定區間内的資料,而trim是留下指定區間的資料,而删除不在區間的所有資料。trim是void,不會傳回任何資料)

15.移除鍵中的指定元素,接收3個參數,分别是緩存的鍵名,計數事件,要移除的值。計數事件可以傳入的有三個值,分别是-1,0,1。

-1代表從存儲容器的最右邊開始,删除一個與要移除的值比對的資料;

0代表删除所有與傳入值比對的資料;

1代表從存儲容器的最左邊開始,删除一個與要移除的值比對的資料。

16.rightPopAndLeftPush該函數用于操作兩個鍵之間的資料,接受兩個參數,分别是源key、目标key。該函數會将源key進行rightPop,再将傳回的值,作為輸入參數,在目标key上進行leftPush。

具體代碼如下:

redisTemplate.opsForList().rightPushAll("keyName1",value1); //[1,2,3,4]
redisTemplate.opsForList().rightPushAll("keyName2",value2); //[1,2,3]
//  用rightPop取出keyName1中的4,然後用LeftPush将4放置在keyName2的左邊
redisTemplate.opsForList().rightPopAndLeftPush("keyName1","keyName2");  // [4,1,2,3]
           

時間關系,寫的比較簡潔,後面會補上各種用法的執行前後的結果對比便于了解。