当前位置: 首页 > news >正文

详解redis(8):数据结构Hash

一、Hash 是什么?

逻辑层面

key = user:1 value = { name: "xiaolin", age: 18, city: "beijing" }

也就是:

HSET user:1 name xiaolin age 18 city beijing

Hash vs String

用 String 存对象

SET user:1 '{"name":"xiaolin","age":18}'

用 Hash 存对象

HSET user:1 name xiaolin age 18
对比点String(JSON)Hash
修改单个字段❌ 需要整体改
读取单字段❌ 反序列化
命令语义
内存利用一般更优
适合对象非常适合

二、为什么 Hash 特别适合存对象?

字段级操作

HINCRBY user:1 score 10

减少 Key 数量

不用:

user:1:name
user:1:age
user:1:city
而是:

user:1
Key 少,对 Redis 更友好

三、Hash 的内部实现

Redis 的哲学:小数据用紧凑结构,大数据用高效结构

两种底层结构

压缩列表

连续内存

紧凑存储

顺序查找

优缺点

内存占用极低
查找是 O(n)
插入删除可能引发连锁更新

哈希表

触发条件

字段多

或字段值大

特点

查找、更新 O(1)
指针多,内存占用高

Hash 自动转换机制

只升不降,不会再变回 ziplist

四、Redis 7.0 的变化:listpack

ziplist 的问题

连锁更新复杂

代码维护成本高

易产生性能抖动

listpack 是什么?

listpack 是 ziplist 的升级版

ziplistlistpack
头尾指针
连锁更新严重
结构复杂
维护成本

五、什么时候该用 Hash?

适合

用户信息

商品属性

配置项

状态对象

不适合

超大字段(几 MB)

只整体读写的对象(String 更简单)

六、Hash 实现购物车

为什么购物车是 Hash 的“天选场景”?

要素对应 Hash
用户key
商品field
数量value

为什么不用 List / String?

List

查商品要遍历

改数量不方便

不支持随机访问

String + JSON

改一个商品要整体反序列化

并发下容易冲突

Hash

O(1) 修改

字段级原子操作

http://www.jsqmd.com/news/290236/

相关文章:

  • 详解redis(9):数据结构set
  • 一文学习 了解 OSI模型、TCP/IP模型、网络封包
  • 深入解析:Linux动态存储管理的逻辑卷使用示例
  • 北京附近上门回收酒
  • YOLOv8目标检测:从理论到实战的飞跃之旅
  • 用AI制作表格实战:20个高频ChatExcel指令词,告别低效Excel操作
  • 打破 NotebookLM 最后的限制:我写了个开源工具,把 PDF 瞬间变回可编辑 PPT!
  • 力扣122 买卖股票的最佳时机II java实现
  • STM32项目分享:图书馆环境监测系统
  • 2026年矩阵系统避坑指南:市面主流软件真实横评,到底哪家好?
  • 2026年私域的八大挑战及发展方向
  • 7×24小时技术支持的售后服务系统有哪些?
  • 2026年矩阵系统选型图谱:5款主流软件的“性格画像”与适用场景匹配
  • 能对接电商系统的售后服务系统有哪些?
  • APS概念-需求时间供应时间
  • APS概念-新订单开始日期延迟
  • APS概念-可承诺量 / 承诺能力拉动容差
  • APS概念-ATP和CTP
  • APS概念-供应耗用容差
  • 互联网医院系统|互联网医院成品|互联网医院开发
  • 干货分享|FPGA、CPU与GPU协同计算架构
  • 太空算力、AI上星与卫星智能化
  • 2025年毕业论文救星!8款AI写论文工具实测,一键改重降重+高级表达替换,原创度飙升!
  • 基于深度学习的交通锥形桶检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 问题记录与反思
  • Qt 属性绑定(Property Binding)机制提供的完整、详细教程与丰富示例,重点覆盖 Qt 6.x 的现代用法
  • 行政管理大专生经济压力大?考这高性价比证书,副业收入超主业
  • 故障复盘:从“组播协议疑云”到“物理协商真相”——记一次视频流中断的排查之旅
  • 深入 Flutter for OpenHarmony 组件属性配置:从代码细节看 UI 表现力构建
  • Postman持久化保存/设置断言详解