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

Redis Hash 类型详解:命令、编码与应用场景

Redis Hash 类型是键值对中的值仍为键值对的数据结构,适合存储对象数据。文章涵盖核心命令如 hset、hget、hdel 等的使用方法与性能特征,解析内部编码机制(ziplist 与 hashtable)的切换条件,并简述其在缓存结构化数据时的应用场景。掌握这些细节有助于优化内存使用与查询效率。

KernelLab发布于 2026/2/26更新于 2026/6/127 浏览
Redis Hash 类型详解:命令、编码与应用场景

简介

在 Redis 中,哈希(Hash)类型的值本身又是一个键值对结构。简单来说,就是 key = "key",value = { { field1, value1 }, …, {fieldN, valueN} }。为了与普通的 String 类型区分,Hash 内部采用 field-value 的映射关系。

文章配图

核心命令速览

hset 与 hget

hset 用于设置 hash 中指定字段的值。如果字段已存在,则覆盖;不存在则新建。

hset key field value [field value ...]

插入一组 field 的时间复杂度为 O(1),插入 N 组则为 O(N)。返回值是添加或更新的字段个数。修改字段时效果相同,无需担心重复创建的问题。

文章配图

hget 则是获取指定字段的值,语法简单:

hget key field

时间复杂度 O(1),若字段不存在返回 nil。注意这里参数名是 field 而非 filed,文档中偶尔出现的拼写错误需留意。

文章配图

字段检查与删除

判断字段是否存在用 hexists,返回 1 表示存在,0 表示不存在。

hexists key field

删除字段使用 hdel,支持批量删除多个字段,返回实际删除的数量。

hdel key field [field ...]

文章配图

遍历与统计

获取所有字段用 hkeys,获取所有值用 hvals,两者时间复杂度均为 O(N),N 为 field 个数。如果需要一次性获取所有字段和值,hgetall 是最直接的选择。

hgetall key

批量获取多个字段的值推荐使用 hmget,比多次调用 hget 更高效。

hmget key field [field ...]

统计字段数量用 hlen,这是一个 O(1) 操作,非常适合快速检查数据规模。

文章配图

特殊操作

hsetnx 仅在字段不存在时设置值,常用于防止覆盖已有数据的场景,返回 1 表示成功,0 表示失败。

对于数值型字段,hincrby 支持整数自增,hincrbyfloat 支持浮点数自增,两者都是原子操作,适合做计数器或累加器。

hincrby key field increment
hincrbyfloat key field increment

为了方便查阅,这里整理了一份常用命令的性能特征表:

命令执行效果时间复杂度
hset key field value设置值O(1)
hget key field获取值O(1)
hdel key field
hlen key计算 field 个数O(1)
hgetall key获取所有的 field-valueO(k), k 是 field 个数
hmget key 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)

内部编码机制

理解 Redis Hash 的内部编码对性能调优很有帮助。主要有两种实现方式:

  1. ziplist(压缩列表):当哈希元素个数小于配置项 hash-max-ziplist-entries(默认 512),且所有值都小于 hash-max-ziplist-value(默认 64 字节)时,Redis 会使用 ziplist。这种结构更紧凑,内存占用更低。
  2. hashtable(哈希表):一旦数据量超过上述阈值,或者写入导致结构变化无法维持 ziplist 特性,Redis 会自动切换到 hashtable。虽然内存开销稍大,但读写效率稳定在 O(1)。

文章配图

这意味着在处理小对象时内存更省,而处理大对象时查询更快,系统会自动平衡这两者。

应用场景

作为缓存

当需要存储结构化数据(如用户信息、商品详情)时,Hash 类型比 String 序列化更合适。它允许你只更新某个字段而不必重新序列化整个对象,这在并发场景下能减少网络传输和锁竞争。

文章配图

使用 Hash 表示结构化数据示例:

文章配图

目录

  1. 简介
  2. 核心命令速览
  3. hset 与 hget
  4. 字段检查与删除
  5. 遍历与统计
  6. 特殊操作
  7. 内部编码机制
  8. 应用场景
  9. 作为缓存
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Linux 基础指令详解
  • OpenClaw Web 控制台使用全解析——可视化配置与监控
  • 绿联云 NAS 配置 WebDAV 实现 Zotero 公网同步
  • STM32 智能家居语音系统(ASRPRO 版)设计与实现
  • Java Set 接口详解
  • OpenClaw 数字员工核心逻辑与架构解析
  • Flutter for OpenHarmony 实战:数独算法与求解器深度解析
  • Linux 基础指令详解(二)
  • Java Web 开发基础:Spring Web MVC 详解
  • 多模态大模型垂直微调实战:Qwen3-VL-4B-Thinking 与 Llama Factory
  • Java 中 ML-KEM 密钥封装机制的 5 大核心实现步骤
  • C++ 二叉搜索树(BST)原理与完整实现
  • 基于FPGA的CARRY4抽头延迟链TDC延时仿真
  • 高鋒集團與 Web3Labs:以資本與生態賦能傳統企業 Web3 轉型
  • Stable Diffusion XL 1.0 灵感画廊免配置部署教程
  • C++ 基于正倒排索引的搜索引擎日志与 Server 代码
  • Git 核心概念解析:从版本控制到团队协作实战
  • OpenClaw ACP 协议深度解析:IDE 直接驱动 AI Agent
  • GitHub 热门项目日榜 (2026-01-30)
  • 基于 SpringBoot 和 Vue 的在线招投标信息管理系统设计与实现

相关免费在线工具

  • 加密/解密文本

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

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Gemini 图片去水印

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