zoukankan      html  css  js  c++  java
  • 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);
        }
    
    
    
    
    
    }
  • 相关阅读:
    Redis命令行之Hash
    Redis命令行之String
    Redis配置
    访问者模式【行为模式】
    状态模式【行为模式】
    责任链模式【行为模式】
    观察者模式【行为模式】
    策略模式【行为模式】
    模板方法模式【行为模式】
    组合模式【结构模式】
  • 原文地址:https://www.cnblogs.com/pengpengdeyuan/p/12145736.html
Copyright © 2011-2022 走看看