欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 【Redis】hash类型

【Redis】hash类型

2025/4/26 18:49:37 来源:https://blog.csdn.net/qq_45795794/article/details/147478506  浏览:    关键词:【Redis】hash类型

目录

  • 1、介绍
  • 2、底层实现
    • 【1】压缩列表
    • 【2】哈希表
    • 【3】压缩列表和哈希表对比
    • 【4】listpack(Redis7.0+使用)
  • 3、常用指令
  • 4、使用场景

1、介绍

Redis的hash是一种键值对集合类型,用于存储对象或结构化数据。其核心特点就是将多个字段(field)与值(value)映射到同一个键(key)下,适用于存储具有多个属性的实体。

2、底层实现

【1】压缩列表

适用条件

1、字段数量 ≤ hash-max-ziplist-entries(默认512)
2、每个字段名和值的字符串长度 ≤ hash-max-ziplist-value(默认64字节)

【2】哈希表

适用条件

任一字段或值超过长度限制,或字段总数超过阈值时

【3】压缩列表和哈希表对比

特性压缩列表哈希表
内存占用极低(连续存储、无指针开销)较高(需存储指针、链表节点等元数据)
查询效率平均O(n)(需遍历)平均O(1)(直接哈希定位)
插入/删除效率平均O(n)(需移动后续元素)平均O(1)(链表操作或扩容)
适用场景字段数少且值小字段数多或值较大时自动切换
扩容开销无需显示扩容需渐进式rehash(可能短暂阻塞)
内存碎片几乎无碎片(连续内存)可能会产生碎片(平凡增删时)

【4】listpack(Redis7.0+使用)

在Redis 7.0中,压缩列表数据结构被替换成listpack数据结构来实现。

3、常用指令

命令语法作用
HSETHSET key field value设置哈希表中字段的值
HGETHGET key field获取哈希表中字段的值
HMSETHMSET key field1 value1 [field2 value2 …]批量设置哈希表的字段(redis4.0中HSET支持批量)
HMGETHMGET key field1 [field2 …]批量获取哈希表的字段值
HGETALLHGETALL key获取哈希表中所有字段和值
HDELHDEL key field1 [field2 …]删除哈希表中的一个或多个字段
HEXISTSHEXIST key field检查哈希表中字段是否存在
HKEYSHKEYS key获取哈希表中所有字段名
HVALSHVALS key获取哈希表中所有字段值
HLENHLEN key获取哈希表中字段数量
HINCRBYHINCRBY key field increment对哈希表中的字段值进行整数增量操作
HINCRBYFLOATHINCRBYFLOAT key field increment对哈希表中的字段值进行浮点数增量操作
HSETNXHSETNX key field value仅当字段不存在时设置值

4、使用场景

特性适用命令使用场景
对象存储HSET/HGET/HGETALL存储结构化对象(如用户、商品信息),避免为每个属性创建独立key
批量读写HMSET/HMGET/新版HSET批量初始化或更新对象属性,减少网络请求次数
计数器HINCRBY/ HINCRBYFLOAT原子性增减数值(如用户积分、库存、点赞)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词