1. 程式人生 > 其它 >redisTemplate方法操作redis

redisTemplate方法操作redis

最近專案做完了,發現redis教程看了不少,但是在redisTemplate還是有好多方法沒怎麼用過,在此學習記錄下來。老版本的 Redis支援五種資料型別:string(字串),hash(雜湊),list(列表),set(集合)及zset(sorted set:有序集合)。 這裡也只說明這五種資料型別操作。

String操作

​ Redis 字串資料型別的相關命令用於管理 redis 字串值

//        獲取值
        redisTemplate.opsForValue().get();
        redisTemplate.opsForValue().multiGet();
//        設定值
        redisTemplate.opsForValue().set("stone","demo",10, TimeUnit.SECONDS);
        HashMap<String, Object> sets = new HashMap<>();
        sets.put("test1","stone1");
        sets.put("test2","stone2");
        sets.put("test3","stone3");
        redisTemplate.opsForValue().multiSet(sets);
//        刪除值
        redisTemplate.delete();
//        原子操作
        redisTemplate.opsForValue().increment();

List操作

​ Redis列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)

​ 一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。

        /**
         * List操作
         */
//        獲取所有list值
        List<Object> lTest = redisTemplate.opsForList().range("lTest", 0,-1);
        Long aLong = redisTemplate.opsForList().leftPushAll("lTest", "value1", "value2", "value3", "value4");
//        在連結串列左端新增一個元素
        redisTemplate.opsForList().leftPush();
//        更新連結串列某個節點的值
        redisTemplate.opsForList().set();
//        刪除佇列左邊第一個元素並返回
        /**
         * 程序永久堵塞,直到有值塞入
         *
         * Removes and returns first element from lists stored at {@code key} . <br>
         * 	 * <b>Blocks connection</b> until element available or {@code timeout} reached.
         */
        redisTemplate.opsForList().leftPop("lTest",0,TimeUnit.SECONDS);
//        不會等待
        redisTemplate.opsForList().leftPop("lTest");

Set操作

​ Redis 的 Set 是 String 型別的無序集合。集合成員是唯一的,這就意味著集合中不能出現重複的資料。

集合物件的編碼可以是 intset 或者 hashtable。

​ Redis 中集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是 O(1)。

集合中最大的成員數為 232 - 1 (4294967295, 每個集合可儲存40多億個成員)。

         /**
         * set操作       多個集合的交併集操作
         */
//        獲取set值
        redisTemplate.opsForSet().members("setTest");
//        新增值
        redisTemplate.opsForSet().add("setTest","test1","test2","test3","test4","test1");
        redisTemplate.opsForSet().add("setTest2","test1","test2","test3","test4","test1");
//        還有很多對比set集合,取出交併集合等操作
        Set<Object> setTest1 = redisTemplate.opsForSet().difference("setTest","setTest2");
        redisTemplate.opsForSet().intersect();
//        刪除
        redisTemplate.opsForZSet().remove();

ZSet操作

​ Redis 有序集合和集合一樣也是 string 型別元素的集合,且不允許重複的成員。

不同的是每個元素都會關聯一個 double 型別的分數。redis 正是通過分數來為集合中的成員進行從小到大的排序。

​ 有序集合的成員是唯一的,但分數(score)卻可以重複。

​ 集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是 O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可儲存40多億個成員)。

        /**
         * zset操作   針對zset設定的score進行操作
         */
//        獲取
        Set<Object> zsetTest = redisTemplate.opsForZSet().range("zsetTest", 10, 10);
//        還有很多通過score來獲取值得操作
//        新增
        redisTemplate.opsForZSet().add();
        Set<ZSetOperations.TypedTuple<Object>> sets = new HashSet<>();
        sets.add(new DefaultTypedTuple("test1",10d));
        sets.add(new DefaultTypedTuple("test2",10d));
        sets.add(new DefaultTypedTuple("test3",10d));
        redisTemplate.opsForZSet().add("zsetTest",sets);
//        刪除
        redisTemplate.opsForZSet().remove();

Map操作

​ Redis hash 是一個 string 型別的 field(欄位) 和 value(值) 的對映表,hash 特別適合用於儲存物件。

​ Redis 中每個 hash 可以儲存 232 - 1 鍵值對(40多億)。

        /**
         * map操作     作用單純map存取值+原子操作
         */
//        獲取
        redisTemplate.opsForHash().get();
        redisTemplate.opsForHash().multiGet();
//        新增
        redisTemplate.opsForHash().put();
//        刪除
        redisTemplate.opsForHash().delete();
//        原子操作
        redisTemplate.opsForHash().increment();