跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言算法

Redis Hash 类型详解

Redis Hash 类型的基本概念,其值为键值对结构,适用于存储对象化数据。详细列出了常用命令如 hset、hget、hdel 等及其语法、时间复杂度和返回值。分析了内部编码机制,包括小数据量下的 ziplist 和大数量下的 hashtable。最后说明了 Hash 在结构化数据存储和缓存场景中的应用优势。

黑客发布于 2026/3/30更新于 2026/10/1897 浏览
Redis Hash 类型详解

一、简介

在 Redis 中,哈希类型是指值本身又是一个键值对结构,形如 key = "key",value = { { field1, value1 }, …, {fieldN, valueN} }。为了与 String 类型的 key-value 作区分,Hash 类型键值对结构表示为 field-value。

String 与 Hash 对比图:

文章配图

二、相关命令

2.1 hset 和 hget

hset: 设置 hash 中指定的字段(field)的值(value)。

语法:hset key field value [field value ...] 命令有效版本:2.0.0 之后

时间复杂度:插入一组 field 为 O(1),插入 N 组 field 为 O(N) 返回值:添加的字段的个数。

文章配图

也可以当修改字段的效果:

文章配图

hget:获取 hash 中指定字段的值。

语法:hget key field

命令有效版本:2.0.0 之后

时间复杂度:O(1) 返回值:字段对应的值或者 nil。

文章配图

2.2 hexists

hexists 判断 hash 中是否有指定的字段。

语法:hexists key field

命令有效版本:2.0.0 之后

时间复杂度:O(1) 返回值:1 表示存在,0 表示不存在。

文章配图

2.3 hdel

hdel 删除 hash 中指定的字段。

语法:hdel key field [field ...]

命令有效版本:2.0.0 之后

时间复杂度:删除一个元素为 O(1),删除 N 个元素为 O(N)。 返回值:本次操作删除的字段个数。

文章配图

2.4 hkeys

hkeys 获取 hash 中的所有字段。

语法:hkeys key

命令有效版本:2.0.0 之后

时间复杂度:O(N),N 为 field 的个数。 返回值:字段列表。

文章配图

2.5 hvals

hvals 获取 hash 中的所有的值。

语法:hvals key

命令有效版本:2.0.0 之后

时间复杂度:O(N),N 为 field 的个数。 返回值:Hash 所有 value 列表。

文章配图

2.6 hgetall

hgetall 获取 hash 中的所有的字段和值。

语法:hgetall key

命令有效版本:2.0.0 之后

时间复杂度:O(N),N 为 field 的个数。 返回值:Hash 所有字段和对应的值。

文章配图

2.7 hmget

hmget 一次获取 hash 中多个字段的值。

语法:hmget key field [field ...]

命令有效版本:2.0.0 之后

时间复杂度:只查询一个元素为 O(1),查询多个元素为 O(N),N 为查询元素个数。 返回值:字段对应的值或者 nil。

文章配图

2.8 hlen

hlen 获取 hash 中的所有字段的个数。

语法:hlen key

命令有效版本:2.0.0 之后

时间复杂度:O(1) 返回值:字段个数。

文章配图

2.9 hsetnx

hsetnx 在字段不存在的情况下,设置 hash 中的字段和值。

语法:hsetnx key field value

命令有效版本:2.0.0 之后

时间复杂度:O(1) 返回值:1 表示设置成功,0 表示失败。

文章配图

2.10 hincrby

hincrby 将 hash 中字段对应的数值 (必须是整数) 添加指定的值。

语法:hincrby key field increment

命令有效版本:2.0.0 之后

时间复杂度:O(1) 返回值:该字段变化之后的值。

文章配图

2.11 hincrbyfloat

hincrbyfloat 是 hincrby 的浮点数版本,将 hash 中字段对应的数值 (可以是整数和浮点数) 添加指定的值。

语法:hincrbyfloat key field increment

命令有效版本:2.6.0 之后

时间复杂度:O(1) 返回值:该字段变化之后的值。

文章配图

2.12 小结

命令执行效果时间复杂度
hset key field value设置值O(1)
hget key field获取值O(1)
hdel key field [field …]删除 fieldO(k), k 是 field 个数
hlen key计算 field 个数O(1)
hgetall key获取所有的 field-valueO(k), k 是 field 个数
hmget key field [field …]批量获取 field-valueO(k), k 是 field 个数
hmset key field value [field value …]批量设置 field-valueO(k), k 是 field 个数
hexists key field判断 field 是否存在O(1)
hkeys key获取所有的 fieldO(k), k 是 field 个数
hvals key获取所有的 valueO(k), k 是 field 个数
hsetnx key field value设置值,但必须在 field 不存在时才能设置成功O(1)
hincrby key field n对应 field-value +nO(1)
hincrbyfloat key field n对应 field-value +nO(1)
hstrlen key field计算 value 的字符串长度O(1)

三、编码方式

哈希的内部编码有两种:

  • ziplist(压缩列表):当哈希类型元素个数小于 hash-max-ziplist-entries 配置(默认 512 个)、同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为哈希的内部实现。ziplist 使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比 hashtable 更加优秀。
  • hashtable(哈希表):当哈希类型无法满足 ziplist 的条件时,Redis 会使用 hashtable 作为哈希的内部实现,因为此时 ziplist 的读写效率会下降,而 hashtable 的读写时间复杂度为 O(1)。

文章配图

四、应用场景

4.1 作为缓存

存储结构化的数据的时候,使用 hash 更加合适。

文章配图

使用 hash 表示:

文章配图

目录

  1. 一、简介
  2. 二、相关命令
  3. 2.1 hset 和 hget
  4. 2.2 hexists
  5. 2.3 hdel
  6. 2.4 hkeys
  7. 2.5 hvals
  8. 2.6 hgetall
  9. 2.7 hmget
  10. 2.8 hlen
  11. 2.9 hsetnx
  12. 2.10 hincrby
  13. 2.11 hincrbyfloat
  14. 2.12 小结
  15. 三、编码方式
  16. 四、应用场景
  17. 4.1 作为缓存

更多推荐文章

查看全部
  • 基于 LangGraph + RAGFlow 的三智能体长文档生成平台 OpenSpec
  • 红日靶场 7 实战:内网横向渗透与 Cobalt Strike 上线全流程
  • Python 基础介绍与 12 个核心开发库详解
  • 元迁移学习:快速适应新任务的方法与原理
  • Microi 吾码:服务器虚拟化资源管理与网络配置实践
  • OpenClaw一键建5个机器人
  • 基于 Claude MCP 协议的智能体落地示例
  • 东方通 TongLINK/Q 与华为 RabbitMQ 国产化运维核心技术解析
  • 用 LangChain 和 ChatGLM 搭一个本地知识库
  • Z-Image-Turbo 本地 AI 绘画工具快速部署与使用指南
  • 2026 AI图像生成免费工具Top10!完全零成本玩转AI绘图
  • ComfyUI Mixlab 插件 Whisper.available False 报错修复
  • AI 大模型赋能医疗行业的应用场景与部署挑战
  • 大模型从零基础入门到精通:核心原理与实战指南
  • Gemini QQ 机器人部署指南
  • Coze 智能体开发:插件、知识库与数据库全解析
  • JavaScript 垃圾回收原理与 V8 分代回收
  • Midjourney 第三方 API 服务技术原理与合规边界
  • 字节跳动开源 Seed-OSS-36B:512K 上下文推理新突破
  • Claude AI 注册流程解析与手机号验证解决方案

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online