redis中的hash

发布时间 2023-10-06 00:03:57作者: 因为在乎

介绍

  Reids中的Hash是一个键值对类型的集合,类似于Java里面的Map<String,Object>,同样也非常适合用来存储对象,存储对象时,可以通过对象的唯一标识来作为存储结构的key而其他对象信息存储为其对应的value,是比较常用的类型。

对象的存储

1.第一种
以对象的唯一标识为 key 其他属性可以序列化或者json字符串的方式作为 value 进行存储
user:{id=1,name=xiaobian,age=70}
但是这样的存储方式有个缺点,就是修改对象属性时无疑会增加复杂难度
以集合元素为单位进行存储
2.第二种
第二种存储方式 将对象的唯一标识及属性名联合起来作为key 其属性值作为 value 进行存储
user_id 1
user_name xiaobian
user_age 70
但是这样的存储方式也是有缺点的,数据不够集中,大家还是可以依照业务需求而定
以集合元素为单位进行存储
3.第三种
第三种方式是以 Hash 的方式进行存储以对象的唯一标识作为 集合名 其属性名还是作为查找条件 key 对应值作为 value
user id 1 name xiaobian age 70
假如要查找 对应user的id的话 就以 user id 为标识进行查找
以集合为单位进行存储 一个对象一个集合

常用命令

1. hset {key} {field} {value}
使用 hset <key> <field> <value> 命令 向key对应的集合中添加一个键值对 键为 field 值为 value
如果该集合不存储则创建一个 将对应的键值对存入其中
2. hget {key} {field}
使用 hget <key> <field> 从key对应的集合中 以 field 最为键查找出对应的值
如果该集合或者该键不存在则返回 null
3. hmset {key} {field1} {value1} {field2} {value2} …
使用 hmset <key> <field1> <value1> <field2> <value2>... 命令
向对应集合中添加多个键值对
4. hexists {key} {field}
使用 hexists <key1> <field> 命令
判断集合中对应的key是否存在
存在的话 则返回 1 不存在的话 则返回 0
5. hkeys {key}
使用 hkeys <key> 命令
返回 对应集合中所有的 键
6. hvals {key}
使用 hvals <key> 命令
返回 对应集合中 所有的 值
7. hincrby {key} {field} {increment}
使用 hincrby <key> <field> <increment> 命令
使对应集合对应的键的值 加 increment
列如 hincrby user age 1 这条命令就是年龄加一
8. hsetnx {key} {field} {value}
使用 hsetnx <key> <field> <value>
使对应集合对应的键的值 设置为 increment
注意: 这条命令对应的 field 要不存在才会生效 否则设置失败返回 0

底层数据结构

Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。

java中使用

例:

 @Test
    void hashTest(){
        BookEntity bookEntity = new BookEntity(1,"文学","西游记","四大名著之一");
        Map<String,Object> map = new HashMap<>();
        map.put("id",bookEntity.getId());
        map.put("type",bookEntity.getType());
        map.put("name",bookEntity.getName());
        map.put("description",bookEntity.getDescription());
        redisUtil.hmset("hashbook",map);
        Map<Object, Object> hashbook = redisUtil.hmget("hashbook");
        log.info(hashbook.toString());

    }

 

redisUtil类见 https://www.cnblogs.com/ywzh/p/17744141.html