目录
一、Redis中Hash介绍
Redis Hash是一个键值对集合
Redis hash 是一个String类型的 field 和 value 的映射表,hash特别适合用于存储对象
类似于Java里面的Map<String,Object>
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储
主要有以下两种存储方式
方法一:每次修改的话需要,先取出来,然后解析,修改,再放序列化放回去,非常的麻烦,所以不推荐
方法二:如果一个对象的属性过多的话,数据就会变得非常复杂,也不推荐
于是就引出了下面的方法
二、常用命令
命令 | 描述 |
---|---|
hset <set> <field> <value> | 给<key>集合中的 <field>键赋值<value> |
hget <key1> <field> | 从key1中取出指定的field对应的value |
hmset <key1> <filed1> <value1> <filed3> <value2> .. | 批量插入key1的filed-value对 |
hexists <key1> <field> | 查看哈希表key中,给定的field是否存在 |
hkeys <key> | 列出该key的所有field |
hvals <key> | 列出该hash集合的所有value |
hincrbu <key> <field> <incerment> | 为哈希表key中的域field的值加上<incerment> |
hsetnx <key><field> <value> | 给哈希表key添加field-value对,当且仅当域field不存在 |
三、示例
hset <key> <field> <value>
给<key>集合中的 <field>键赋值<value>
可以批量插入field-value对
hget <key1> <field>
从key1中取出指定的field对应的value
注意,这里的<user:100>整体是一个key,":"不是一定要存在的
hmset <key1> <filed1> <value1> <filed3> <value2> ..
批量插入key1的filed-value对
但是hset也是可以批量插入的,当时作者在学习redis的时候也是十分疑惑
后来查阅过官方文档后发现:根据Redis 4.0.0,HMSET被视为已弃用。请在新代码中使用HSET。
在redis4.0之后,hset也是可以批量插入的,所以hmset就被弃用了
所以推荐大家使用hset
hexists <key1> <field>
查看哈希表key中,给定的field是否存在,存在则返回1,不存在返回0
这里id域存在则返回1,xxx不存在返回0
hkeys <key>
列出该key的所有field
hvals <key>
列出该hash集合的所有value
hincrbu <key> <field> <incerment>
为哈希表key中的域field的值加上<incerment>
hsetnx <key><field> <value>
给哈希表key添加field-value对,当且仅当域field不存在
id存在,所以添加失败,返回0,添加班级id成功,返回1
四、redis中Hash底层数据结构
Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)
当field-value长度较短且个数较少时使用ziplist,否则使用hashtable
好了,这次的文章就到这里,喜欢的同学可以点赞收藏,遇到问题,可以评论,或者留言,我一定会第一时间给到回馈,感谢观看!!
注:本文为本人学习时心得分享,有讲错或者需要改正的地方,请指正,我会虚心接受