spring data redis操作redis(二)
上一篇说到了如何操作k,v类型并说到了序列化的问题并解决。这一篇就讲解一下操作其他的redis数据类型。
操作String类型数据
@Test
    void testString() {
        ValueOperations valueOperations = stringRedisTemplate.opsForValue();
        valueOperations.set("name456","xiaohong");
        String name = (String) valueOperations.get("name456");
        System.out.println(name);
        //设置键值对过期时间  对应setex命令
        valueOperations.set("key1","value1",10L, TimeUnit.SECONDS);//最后一个参数是失效时间的单位   
    }
10秒过后,发现key已经消失了,这就是对应了redus的setex命令

对应setnx命令,如果不存在时返回true,否则false
 @Test
    void testString() {
        ValueOperations valueOperations = stringRedisTemplate.opsForValue();
        valueOperations.set("name456","xiaohong");
        String name = (String) valueOperations.get("name456");
        System.out.println(name);
        //设置键值对过期时间  对应setex命令
        valueOperations.set("key1","value1",10L, TimeUnit.SECONDS);
        //当key不存在时生效,对应setnx命令
        Boolean flag = valueOperations.setIfAbsent("name456", "123");
        System.out.println(flag);
    }

不存在则为true

Hash类型
@Test
    void testHash(){
        HashOperations<String, String, String> hashOperations = stringRedisTemplate.opsForHash();
        //存值
        hashOperations.put("001","name","xiaoming");
        hashOperations.put("001","age","20");
        hashOperations.put("001","address","bj");
        //取值
        String name = hashOperations.get("001", "name");
        System.out.println(name);
        //获取所有的键
        Set<String> keys = hashOperations.keys("001");
        for(String key:keys){
            System.out.println(key);
        }
        //获取所有的值
        List<String> values = hashOperations.values("001");
        for(String value:values){
            System.out.println(value);
        }
        
    }
操作list类型
 @Test
    void testList(){
        ListOperations<String, String> listOperations = stringRedisTemplate.opsForList();
        //存值,leftPush方法只能存一个list元素
        listOperations.leftPush("mylist","a");
        //存值,存储多个list元素
        listOperations.leftPushAll("mylist","b","c","d");
        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        //遍历
        mylist.stream().map((item)->{
            System.out.println(item);
            return null;
        }).collect(Collectors.toList());
        //出队列
        int size = listOperations.size("mylist").intValue();//获取list长度
        for (int i = 0; i < size; i++) {
            String element = listOperations.rightPop("mylist");//从右边出队列并返回值
            System.out.println(element);
        }
    }
因为a是最先进队列的,然后又是左边push所以就成了最后了。

出队列就从右边开始出,所以执行过程就是这样了

操作set集合
 @Test
    void testSet(){
        SetOperations<String, String> setOperations = stringRedisTemplate.opsForSet();
        //存值
        setOperations.add("myset","a","b","c","a");
        //取值
        Set<String> myset = setOperations.members("myset");
        for(String set:myset){
            System.out.println(set);
        }
        //删除成员
        setOperations.remove("myset","a","b");
        //取值
        myset = setOperations.members("myset");
        for(String set:myset){
            System.out.println(set);
        }
    }
操作有序集合 sorted set
这里的a为什么是最后呢。因为set集合元素是唯一的,最后一个元素覆盖掉了第一个a,并且它的scores值最高,所以是最后。

然后修改了b的scores给它+20了,比所有的scores都高,所以它是最后的。删除a,b后只剩下了c

 @Test
    void teseZset(){
        ZSetOperations<String, String> zSetOperations = stringRedisTemplate.opsForZSet();
        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","c",12.0);
        zSetOperations.add("myZset","a",13.0);
        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String Zset : myZset) {
            System.out.println(Zset);
        }
        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);
        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String Zset : myZset) {
            System.out.println(Zset);
        }
        //删除成员
        zSetOperations.remove("myZset","a","b");
        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String Zset : myZset) {
            System.out.println(Zset);
        }
    }
通用操作
     @Test
        public void testCommon(){
            //获取Redis中所有的key
            Set<String> keys = stringRedisTemplate.keys("*");
            for (String key : keys) {
                System.out.println(key);
            }
            //判断某个key是否存在
            Boolean itcast = stringRedisTemplate.hasKey("itcast");
            System.out.println(itcast);
            //删除指定key
            stringRedisTemplate.delete("myZset");
            //获取指定key对应的value的数据类型
            DataType dataType = stringRedisTemplate.type("myset");
            System.out.println(dataType.name());
        }


 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号