RedisTemplate操作(String、hash、set)


@SpringBootTest
class Demo1ApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void contextLoads() {
        redisTemplate.opsForValue().set("key1","value1");
        System.out.println("redisTemplate存redisTemplate取:"+redisTemplate.opsForValue().get("key1"));
        System.out.println("redisTemplate存stringRedisTemplate取:"+stringRedisTemplate.opsForValue().get("key1"));
        stringRedisTemplate.opsForValue().set("key2","value2");
        System.out.println("stringRedisTemplate存redisTemplate取:"+redisTemplate.opsForValue().get("key2"));
        System.out.println("stringRedisTemplate存stringRedisTemplate取:"+stringRedisTemplate.opsForValue().get("key2"));
    }

//  String
    @Test
    public void StringDemo1(){
        //存k,v
        redisTemplate.opsForValue().set("key1","value1");
        //取v
        String s = (String)redisTemplate.opsForValue().get("key1");
        System.out.println(s);
    }

    @Test
    public void StringDemo2() throws Exception{
        //設定有效時長,TimeUnit.SECONDS是單位
        redisTemplate.opsForValue().set("key2","value2",1, TimeUnit.SECONDS);

        Thread.sleep(1100);
        System.out.println(redisTemplate.opsForValue().get("key2"));
    }

    @Test
    public void StringDemo3() throws Exception{
        stringRedisTemplate.opsForValue().set("key", "hello world");
        //從偏移量開始對給定key的value進行覆寫,若key不存在,則前面偏移量為空
        stringRedisTemplate.opsForValue().set("key", "redis", 10);

//      stringRedisTemplate.opsForValue().set("key", "redis", 6);
        System.out.println(stringRedisTemplate.opsForValue().get("key"));
        Thread.sleep(1100);
        System.out.println(stringRedisTemplate.opsForValue().get("key"));
    }

    @Test
    public void StringDemo4() {
        redisTemplate.opsForValue().set("name", "test");
        //若key不存在,設值
        redisTemplate.opsForValue().setIfAbsent("name", "test2");
        System.out.println(redisTemplate.opsForValue().get("name"));//還是test
    }

    @Test
    public void StringDemo5() {
        //批量k,v設值
        Map<String, String> map = new HashMap<String, String>();
        map.put("k1", "v1");
        map.put("k2", "v2");
        map.put("k3", "v3");
        redisTemplate.opsForValue().multiSet(map);

        //批量取值
        List<String> keys = new ArrayList<String>();
        keys.add("k1");
        keys.add("k2");
        keys.add("k3");
        List<String> values = redisTemplate.opsForValue().multiGet(keys);
        System.out.println(values);

        //批量設值,若key不存在,設值
        //redisTemplate.opsForValue().multiSetIfAbsent(map);

    }

    @Test
    public void StringDemo6() {
        redisTemplate.opsForValue().set("name", "bpf");
        //設值並返回舊值,無舊值返回null
        System.out.println(redisTemplate.opsForValue().getAndSet("ttt", "calvin"));
    }

    @Test
    public void StringDemo7() {
        //自增操作,原子性。可以對long進行double自增,但不能對double進行long自增,會拋出異常
        redisTemplate.opsForValue().increment("count", 1L);//增量為long
        System.out.println(redisTemplate.opsForValue().get("count"));

        redisTemplate.opsForValue().increment("count", 1.1);//增量為double
        System.out.println(redisTemplate.opsForValue().get("count"));
    }

    @Test
    public void StringDemo8() {
        //key不存在,設值
        redisTemplate.opsForValue().append("str", "hello");
        System.out.println(redisTemplate.opsForValue().get("str"));
        //key存在,追加
        redisTemplate.opsForValue().append("str", " world");
        System.out.println(redisTemplate.opsForValue().get("str"));

    }

    @Test
    public void StringDemo9() {
        redisTemplate.opsForValue().set("key", "hello world");
        //value的長度
        System.out.println(redisTemplate.opsForValue().size("key"));//11
    }

    @Test
    public void StringDemo10() {
        redisTemplate.opsForValue().set("bitTest","a");
        // 'a' 的ASCII碼是 97  轉換為二進制是:01100001
        // 'b' 的ASCII碼是 98  轉換為二進制是:01100010
        // 'c' 的ASCII碼是 99  轉換為二進制是:01100011

        //因為二進制只有0和1,在setbit中true為1,false為0,因此我要變為'b'的話第六位設置為1,第七位設置為0
        redisTemplate.opsForValue().setBit("bitTest",6, true);
        redisTemplate.opsForValue().setBit("bitTest",7, false);
        System.out.println(redisTemplate.opsForValue().get("bitTest"));

        //判斷offset處是true1還是false0
        System.out.println(redisTemplate.opsForValue().getBit("bitTest",7));
    }


    //Hash
    @Test
    public void hashDemo1(){
        redisTemplate.opsForHash().put("p1","name","zhangsan");
        redisTemplate.opsForHash().put("p1","age","21");
        redisTemplate.opsForHash().put("p1","gender","true");


    }




    @Test
    public void demo1() {
        //put方法
        redisTemplate.opsForHash().put("k1", "name", "zhangshan");
        redisTemplate.opsForHash().put("k1", "age", "20");
        redisTemplate.opsForHash().put("k1", "height", "170");

        //hashKey不存在時,才設值
        //redisTemplate.opsForHash().putIfAbsent(key, hashKey, value)
    }

    @Test
    public void demo2() {
        //putAll方法
        Map<String, String> data = new HashMap<>();
        data.put("name", "jack ma");
        data.put("company", "alibaba");
        data.put("age", "500");
        redisTemplate.opsForHash().putAll("k2", data);
    }

    @Test
    public void demo3() {
        //delete方法,刪除key對應的hash的hashkey及其value
        redisTemplate.opsForHash().delete("k2", "name");
    }

    @Test
    public void demo4() {
        //hasKey方法,確定hashkey是否存在
        System.out.println(redisTemplate.opsForHash().hasKey("k2", "name"));
    }

    @Test
    public void demo5() {
        //get方法,根據key和hashkey找出對應的值
        System.out.println(redisTemplate.opsForHash().get("k1", "name"));
    }

    @Test
    public void demo6() {
        //multiGet方法,根據key和多個hashkey找出對應的多個值
        Collection<Object> keys = new ArrayList<>();
        keys.add("name");
        keys.add("age");
        System.out.println(redisTemplate.opsForHash().multiGet("k1", keys));
    }

    @Test
    public void demo7() {
        //increment方法,對key和hashkey對應的值進行增加操作
        //增加長整形(無法對浮點數據使用本方法)
        System.out.println(redisTemplate.opsForHash().increment("k1", "age", 1));
        //增加浮點型(可以對整形數據使用本方法)
        System.out.println(redisTemplate.opsForHash().increment("k1", "age", 1.0));
    }

    @Test
    public void demo8() {
        //keys方法,獲取key對應的hash表的所有key
        Set<Object> keys = redisTemplate.opsForHash().keys("k1");
        System.out.println(keys);

        //values方法,獲取key對應的hash表的所有value
        List<Object> values = redisTemplate.opsForHash().values("k1");
        System.out.println(values);
    }

    @Test
    public void demo9() {
        //keys方法,獲取key對應的hash表的大小
        long size = redisTemplate.opsForHash().size("k1");
        System.out.println(size);
    }

    @Test
    public void demo10() {
        //keys方法,獲取key對應的hash表的所有鍵值對
        Map<Object, Object> entries = redisTemplate.opsForHash().entries("k1");
        System.out.println(entries);
    }

    //set

    @Test
    public void setDemo1() {
        //集合中添加元素,返回添加個數
        redisTemplate.opsForSet().add("games", "鬼泣", "古墓麗影", "仙劍奇俠傳", "LOL", "DOTA自走棋");
        System.out.println(redisTemplate.opsForSet().members("games"));
    }

    @Test
    public void setDemo2() {
        //從集合中刪除指定元素
        redisTemplate.opsForSet().remove("games", "鬼泣");
        printSet("games");
    }

    @Test
    public void setDemo3() {
        //從集合中隨機刪除一個元素,並返回該元素
        String item = (String)redisTemplate.opsForSet().pop("games");
        System.out.println(item);
        printSet("games");
    }

    @Test
    public void setDemo4() {
        //將集合1中的指定元素移到集合2,移動后原集合中該數據不存在了
        redisTemplate.opsForSet().move("games", "仙劍奇俠傳", "chinese-games");
        //打印集合1
        printSet("games");
        //打印集合2
        printSet("chinese-games");
    }



    @Test
    public void setDemo5() {
        //獲得集合大小
        Long size = redisTemplate.opsForSet().size("games");
        printSet("games");
        System.out.println(size);
    }

    @Test
    public void setDemo6() {
        //判斷集合中是否存在某元素
        Boolean ifExist = redisTemplate.opsForSet().isMember("games", "LOL");
        System.out.println(ifExist);
    }

    @Test
    public void setDemo7() {
        //添加集合a
        redisTemplate.opsForSet().add("set-a", "a", "b", "c", "d");
        //添加集合b
        redisTemplate.opsForSet().add("set-b", "a", "b");
        //求交集
        Set<String> intersection = redisTemplate.opsForSet().intersect("set-a", "set-b");
        //也可以和多個key對應的集合求交集                  Set<V> intersect(K key, K otherKey);
        System.out.println(intersection);
    }

    @Test
    public void setDemo8() {
        //添加集合a
        redisTemplate.opsForSet().add("set-a", "a", "b", "c", "d");
        //添加集合b
        redisTemplate.opsForSet().add("set-b", "a", "b");
        //求交集並放入集合c
        redisTemplate.opsForSet().intersectAndStore("set-a", "set-b", "set-c");
        //也可以和多個key對應的集合求交集                 Long intersectAndStore(K key, Collection<K> otherKeys, K destKey);
        //打印集合c
        printSet("set-c");
    }

    @Test
    public void setDemo9() {
        //添加集合m
        redisTemplate.opsForSet().add("set-m", "a", "b", "c", "d");
        //添加集合n
        redisTemplate.opsForSet().add("set-n", "c", "d", "e", "f");
        //求並集
        Set<String> union = redisTemplate.opsForSet().union("set-m", "set-n");
        Set c = redisTemplate.opsForSet().union("c", union);
        System.out.println(union);
        System.out.println(c);

        //其他操作與intersect類似 如和多個key求並集,求並集並放入集合等
    }

    @Test
    public void setDemo10() {
        //添加集合d
        redisTemplate.opsForSet().add("set-d", "a", "b", "c", "d");
        //添加集合e
        redisTemplate.opsForSet().add("set-e", "c", "d", "e", "f");
        //添加集合f
        redisTemplate.opsForSet().add("set-f", "e", "f", "g", "h");

        //求差集(屬於d不屬於e和f)
        Set<String> difference = redisTemplate.opsForSet().difference("set-d", Arrays.asList("set-e", "set-f"));
        System.out.println(difference);
        //其他操作與交集並集類似
    }

    @Test
    public void setDemo11() {
        //隨機獲取集合中的一個元素
        System.out.println(redisTemplate.opsForSet().randomMember("games"));

        //隨機獲取集合中指定個數的元素(有可能重復)
        System.out.println(redisTemplate.opsForSet().randomMembers("games", 10));

        //隨機獲取集合中指定個數的元素(不重復)
        System.out.println(redisTemplate.opsForSet().distinctRandomMembers("games", 10));


    }


    private void printSet(String key) {
        //獲取所有成員
        Set<String> members = redisTemplate.opsForSet().members(key);
        System.out.println(members);
    }





}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM