Redis学习笔记(七)---数据类型之Hash

1.哈希(Hash)相当于Java中的一个bean对象

类似于Java中的一个JavaBean(例如:Users(id,name,age,remark))

1.1简介:

Redis hash 是一个string 类型的field和value的映射表,hash特别适合用于存储对象,Redis中每个hash可以存储2^32 - 1键值对(40多亿)
可以看成具有key和value的MAP容器,该类型非常适合于存储值对象的信息,如: uname,upass,age等。该类型的数据仅占用很少的磁盘空间(相比于JSON)

1.2 Hash命令

[1] 赋值语法

 hset key field value//为指定的key,设定field/value对
 hmset key field value[field1,value1].....同时将多个 field-value(域-值)对设置到哈希表key中
例如: hmset users uname guo age 20 address “北京市”

[2] 取值语法

hget key field//获取存储在hash中的值,根据field得到value
hmget key field [field1]   //获取key所有给定字段的值
hgetall key   //返回HASH表中所有的字段和值
hkeys key    //获取所有哈希表中的字段
hlen key   //获取哈希表中字段的数量

[3] 删除语法

 hdel  key field1[field2]        //删除一个或多个HASH表字段

[4] 其他语法:

hsetnx key field value
只有在字段field不存在时,设置哈希表字段的值

hincrby key field increment
为哈希表key中指定字段的整数值加上增量increment

hincrbyfloat key field increment
为哈希表中指定字段的浮点数值加上增量increment

hexists key field  
查看哈希表key中,指定的字段是否存在

1.3应用场景

Hash 的应用场景(存储一个用户信息对象数据)
[1] 常用于存储一个对象
[2] 为什么不用string存储一个对象?
hash 是最接近关系数据库结构的数据类型,可以将数据库一条记录或程序中一个对象转换成 hashmap 存放在redis中。
用户ID 为查找的 key, 存储的 value 为用户对象包含姓名,年龄,生日等信息,如果用普通的用户ID 为查找的 key/value 结构来存储,主要有以下2种存储方式:
第一种方式将用户ID 作为查找 key,把其他信息封装成一个对象以序列化方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题
第二种方法是这个用户信息对象有多少成员就存多少个 key-value 对儿,用用户ID+对应属性名称作为唯一标识取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。
总结:
Redis提供的 Hash 很好解决了这个问题,Redis 的 Hash 实际是内部存储的 Value 为一个 HashMap, 并提供了直接存取这个 Map 成员的接口。

发布了41 篇原创文章 · 获赞 2 · 访问量 1997

猜你喜欢

转载自blog.csdn.net/TheWindOfSon/article/details/104149071
今日推荐