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
评论