Redis操作哈希结构数据

  今天带来的是Redis操作的第二部分:Redis操作Hash。总体上来讲与操作字符串的方式基本相同。hash类似于java中的map,存储的基本上都是String类型的key和value的键值对,在内存足够大的情况下,一个hash结构可以存储2的32次方-1个键值对。但是需要注意的是,由于 redis是一个内存数据库, 所有数据基本上都存在于内存当中, 会定时以追加或者快照的方式刷新到硬盘中。所以当我们读取大量数据的时候,我们要考虑到对JVM内存的影响。
同时在接下来我们的操作中我们会看到,Redis对hash 的操作与对字符串的操作相比,都会多一个hash名作为参数,这是需要注意的。

Redis存hash数据

添加整个Hash

   @RequestMapping("hmset")
    @ResponseBody
    public Map<String,Object> hmset(){
        Map<String,Object> map = new HashMap<>();
        map.put("f1","value1");
        map.put("f2","value2");
        stringRedisTemplate.opsForHash().putAll("hash",map);
        return  map;
    }

由于此时我们存取的都是String类型的数据,所以我使用的依然是。StringRedisTemplete,上述操作完成后在可视化工具中可见
这里写图片描述

向已经存在的hash结构中添加或修改数据

    @RequestMapping("hset")
    @ResponseBody
    public Map<String,Object> hset(){
        Map<String,Object> map = new HashMap<>();
        stringRedisTemplate.opsForHash().put("hash","f1","new value1");
        return  map;
    }

这里写图片描述

可以看到数据已经被修改

为hash添加数据

    @RequestMapping("hsetnx")
    @ResponseBody
    public void hsetnx(){
        Boolean success =  stringRedisTemplate.opsForHash().putIfAbsent("hash","f5","9");
        System.out.println(success);
    }

putIfAbsent表示如果已经存在对应的key则不会添加,没有对应的key则添加,如图
这里写图片描述

判断Hash结构中是否有输入的key

    @RequestMapping("hexsit")
    @ResponseBody
    public void hexsit(){
      Boolean exsit =  stringRedisTemplate.opsForHash().hasKey("hash","f3");
      System.out.println(exsit);
    }

根据我们插入的数据,最后控制台输出了false

获取hash中的所有键值对

    @RequestMapping("hgetall")
    @ResponseBody
    public Map<Object,Object> hgetall(){
       Map<Object,Object> map=  stringRedisTemplate.opsForHash().entries("hash");
        return  map;
    }

结果可见如图这里写图片描述

hash实现加法

   @RequestMapping("hincrby")
    @ResponseBody
    public void hincrby(){
        stringRedisTemplate.opsForHash().put("hash","f4","8");
         Long f4 =    stringRedisTemplate.opsForHash().increment("hash","f4",6);
         System.out.println(f4);
    }

这里写图片描述

hash实现获取所有key的值

    @RequestMapping("hvals")
    @ResponseBody
    public void hvals(){
        List<Object> list = stringRedisTemplate.opsForHash().values("hash");
        for (int i =0;i<list.size();i++){
            System.out.println(list.get(i));
        }
    }

可见控制台输出
这里写图片描述

hash实现 删除元素

    @RequestMapping("hdel")
    @ResponseBody
    public void hdel(){
        //返回真实删除的个数
        Long count =  stringRedisTemplate.opsForHash().delete("hash","f2","f3");
        System.out.println(count);//此处返回1
    }

此时数据库中不存在f3,控制台中输出了1.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值