文档地址
注意:
在使用hGetAll时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果开发人员只需要获取部分field,可以使用hMGet,如果一定要获取全部
field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型
内部编码
- ziplist(压缩列表)
- hashtable(哈希表)
编码的选择
- 内部编码默认是ziplist(当子建个数比较少且没有大的value时)
- 当有value大于64字节或者个数超过512,内部编码会由ziplist变为hashtable
编码的区别
因为Rziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀
案例
1.缓存用户信息
ID | name | age | sex |
---|---|---|---|
1 | abner | 20 | 1 |
2 | abner2 | 21 | 2 |
(1)序列化哈希类型:将用户信息序列化后用一个键保存
hSet user:user_info key serialize(userInfo)
优点:字段内容可以和数据库对应
缺点:序列化和反序列化占用一定的开销,当子健比较多或者value较大的时候,会切换成hashtable消耗更多内存。
(2)序列化字符串类型:将用户信息序列化后用一个键保存
set user:1 serialize(userInfo)
优点:简化编程,如果合理的使用序列化可以提高内存的使用效率。
缺点:序列化和反序列化有一定的开销,同时每次更新属性都需要把全
部数据取出进行反序列化,更新后再序列化到Redis中。
(2)哈希类型:每个用户属性使用键值对,但是只用一个键保存。
hMSet user:1 name abner 20 sex 1
优点:简单直观,如果使用合理可以减少内存空间的使用。
缺点:要控制哈希在ziplist和hashtable两种内部编码的转换,hashtable会
消耗更多内存。