redis-API-哈希

API-哈希.png

文档地址

注意:
    在使用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会
消耗更多内存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Redis的内存优化 声明:本文内容来自《Redis开发与运维》一书第八章,如转载请声明。 Redis所有的数据都...
    meng_philip123阅读 18,970评论 2 29
  • 参考来源 Redis的内存优化 Redis所有的数据都在内存中,而内存又是非常宝贵的资源。对于如何优化内存使用一直...
    秦汉邮侠阅读 1,320评论 0 2
  • 哈希,也叫作字典或关联数组,指的是健值本身又是一个键值对结构。伪代码如下: 命令 设置值 获取值 删除字段 计算个...
    苏近之2017阅读 458评论 0 0
  • 声明:本文内容来自《Redis开发与运维》一书第八章,如转载请声明。Redis所有的数据都在内存中,而内存又是非常...
    yoqu阅读 1,541评论 0 2
  • 1.数据结构 1.1字符串 字符串类型的值实际可以是字符串、数字(整数,浮点数),甚至是二进制(图片、视频)...
    Sponge1128阅读 1,319评论 0 0