天天看點

SpringBoot 2.2.0 SpringData Redis使用示例(二)

redis常用操作

redis中常用的資料類型操作;

  • redisTemplate.opsForValue(); 用來操作String資料類型
  • redisTemplate.opsForHash(); 用來操作Hash資料類型
  • redisTemplate.opsForList(); 用來操作List資料類型
  • redisTemplate.opsForSet(); 用來操作Set資料類型
  • redisTemplate.opsForZSet(); 用來操作ZSet資料類型

String資料類型儲存操作

@Test
    public void stringTest() {

        //不會過期
        redisTemplate.opsForValue().set("k1", "v1");

        //10秒後過期
        redisTemplate.opsForValue().set("k2", "v2", 10, TimeUnit.SECONDS);

        //替換
        redisTemplate.opsForValue().set("k1", "w", 0);

        //先判斷key是否存在 當key存在時不操作,不存在時執行儲存操作
        redisTemplate.opsForValue().setIfAbsent("k2", "v2");

        //儲存多個
        Map<String, String> map = new HashMap<>(16);
        map.put("k3", "v3");
        map.put("k4", "v4");
        map.put("k5", "v5");
        redisTemplate.opsForValue().multiSet(map);
        
        //追加字元串,當key存在時會追加字元串,不存在則執行儲存操作
        redisTemplate.opsForValue().append("k1","te");
    }
           

String資料類型擷取操作

@Test
    public void stringGetTest() {

        //擷取key為k1的資料
        Object k1 = redisTemplate.opsForValue().get("k1");
        System.out.println(k1);

        //擷取k1的值并截取,從0開始到1的值
        String k11 = redisTemplate.opsForValue().get("k1", 1, 1);
        System.out.println(k11);

        //批量擷取
        ArrayList<String> list = new ArrayList<>();
        list.add("k1");
        list.add("k3");
        List<Object> objects = redisTemplate.opsForValue().multiGet(list);

        System.out.println(objects);

        //擷取key 的長度
        Long size = redisTemplate.opsForValue().size("k1");
        System.out.println(size);
    }
           

删除key

@Test
    public void deleteTest() {
        // 删除
        redisTemplate.delete("k1");
        //删除多個
        ArrayList<String> list = new ArrayList<>();
        list.add("k1");
        list.add("k3");
        redisTemplate.delete(list);
    }
           

操作Hash資料類型

@Test
    public void saveHashTest() {

        UserDTO userDTO = new UserDTO();
        userDTO.setId(1);
        userDTO.setUsername("redis");
        userDTO.setCreateTime(LocalDateTime.now());
        //儲存對象
        redisTemplate.opsForHash().put("dt","3",userDTO);

        // 根據key 檢視值是否存在
        Boolean dt = redisTemplate.opsForHash().hasKey("dt", "3");
        System.out.println(dt);

        // 擷取key中的值
        Object dt1 = redisTemplate.opsForHash().get("dt", "3");
        System.out.println(dt1);


        //擷取所有key
        Set<Object> keys = redisTemplate.opsForHash().keys("dt");
        for (Object key : keys) {
            System.out.println(key);
        }
        //擷取所有value
        List<Object> values = redisTemplate.opsForHash().values("dt");

        for (Object value : values) {
            System.out.println(value);
        }

        Map<Object, Object> entries = redisTemplate.opsForHash().entries("dt");


        entries.forEach((k,v)->{
            System.out.println(k);
            System.out.println(v);
        });
        
           //删除
        redisTemplate.opsForHash().delete("dt", 1);

    }
           

操作List資料類型

@Test
    public void listTest() {

        //從左邊插入
        redisTemplate.opsForList().leftPush("Lk1", "左邊");
        redisTemplate.opsForList().leftPush("Lk1", "左邊1");


        //添加多個

        redisTemplate.opsForList().leftPushAll("Lk1", "L1", "L2");

        //從右邊插入
        redisTemplate.opsForList().rightPush("Rk1", "右邊1");

        //從左邊擷取一個
        Object lk1 = redisTemplate.opsForList().leftPop("Lk1");
        System.out.println(lk1);
        Object lk11 = redisTemplate.opsForList().rightPop("Lk1");
        System.out.println(lk11);


        //擷取key為LK1,索引值為0 的數資料
        Object lk12 = redisTemplate.opsForList().index("Lk1", 0);
        System.out.println(lk12);

        //擷取key為LK1,索引值為2 的數資料
        Object index2 = redisTemplate.opsForList().index("Lk1", 1);
        System.out.println(index2);

        //範圍查找
        List<Object> lk13 = redisTemplate.opsForList().range("Lk1", 0, 1);
        System.out.println(lk13);

        //删除
        //從右邊删除一個元素
        Object lk14 = redisTemplate.opsForList().rightPop("Lk1");
        System.out.println(lk14);

        //從左邊删除一個元素
        Object lk15 = redisTemplate.opsForList().leftPop("Lk1");
        System.out.println(lk14);

        //指定删除元素
        // l=0 删除所有元素等于L2的元素
        // l>0 删除左邊起第幾個元素等于L2的元素
        // l<0 删除右邊起起第幾個元素等于L2的元素
        Long remove = redisTemplate.opsForList().remove("Lk1", 2, "L2");
        System.out.println(remove);
    }
           

操作Set資料類型

@Test
    public void setTest() {

        //添加操作
        redisTemplate.opsForSet().add("Sk1", "xiao");
        redisTemplate.opsForSet().add("Sk1", "xiao", "ming","dat","wang");


        //擷取操作

        //查詢所有

        Set<Object> members = redisTemplate.opsForSet().members("Sk1");
        for (Object member : members) {
            System.out.println(member);
        }

        //随機擷取
        Object sk1 = redisTemplate.opsForSet().randomMember("Sk1");
        System.out.println(sk1);

        //随機擷取多個
        List<Object> sk11 = redisTemplate.opsForSet().randomMembers("Sk1", 2);
        for (Object o : sk11) {
            System.out.println(o);
        }

    }

           

删除操作

@Test
    public void setDeleteTest() {

        //    删除
        Long sk1 = redisTemplate.opsForSet().remove("Sk1", "xiao");
        System.out.println(sk1);
        //随機删除幾個元素
        List<Object> sl1 = redisTemplate.opsForSet().pop("Sl1", 1);
        for (Object o : sl1) {
            System.out.println(o);
        }
    }
           

常用集合操作

@Test
    public void setUTest() {
        //添加操作
        // redisTemplate.opsForSet().add("Sk2", "xiao", "woshi", "liwang", "mazi");
        // redisTemplate.opsForSet().add("Sk1", "xiao", "ming", "dat", "wang", "mazi");

        //交集
        Set<Object> intersect = redisTemplate.opsForSet().intersect("Sk1", "Sk2");
        for (Object o : intersect) {
            System.out.println(o);
        }
        //并集
        Set<Object> union = redisTemplate.opsForSet().union("Sk1", "Sk2");

        for (Object o : union) {
            System.out.println(o);
        }

        //差集
        Set<Object> difference = redisTemplate.opsForSet().difference("Sk1", "Sk2");

        for (Object o : difference) {
            System.out.println(o);
        }
    }
           

繼續閱讀