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可见控制台输出

hash实现 删除元素
@RequestMapping("hdel")
    @ResponseBody
    public void hdel(){
        //返回真实删除的个数
        Long count = stringRedisTemplate.opsForHash().delete("hash","f2","f3");
        System.out.println(count);//此处返回1
    }此时数据库中不存在f3,控制台中输出了1.
出处:csdn.net/u011342403/article/details/79080968
评论
