news 2026/6/15 23:24:51

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
详解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) 修改

字段级原子操作

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:48:40

APS概念-供应耗用容差

一、核心概念解读供应耗用容差是 APS 系统中用于处理物料供应与需求时间匹配的灵活规则,它允许系统在物料 “实际可用日期” 之前,提前将供应分配给需求,从而避免因供应与需求日期的微小偏差导致计划中断。二、容差因子的含义容差因子用负数表…

作者头像 李华
网站建设 2026/6/15 12:35:28

农资行业B2B多租户商城系统推荐,适配农业经销商层级管理

在农业现代化与数字化转型的双重驱动下,农资行业正逐步摆脱传统分销模式的桎梏。传统农资流通存在渠道层级繁杂、信息传递滞后、供应链协同效率低下等痛点,数据显示,农资产品从生产端到终端用户的流通环节平均需经过4-6级分销,每增…

作者头像 李华
网站建设 2026/6/15 15:47:50

基于Android的大学食堂点餐APP(源码+lw+部署文档+讲解等)

课题介绍本课题旨在设计并实现基于 Android 的大学食堂点餐 APP,针对高校食堂线下就餐排队耗时、选餐信息不透明、餐品浪费率高、食堂运营效率低等校园就餐痛点,打造适配大学生群体与食堂运营的移动点餐服务平台,实现食堂点餐线上化、取餐便捷…

作者头像 李华
网站建设 2026/6/15 17:52:09

基于Android的电影院网上订票系统(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并实现基于 Android 的电影院网上订票系统,针对传统影院线下购票排队耗时、场次信息获取不及时、选座体验差、票务管理低效等观影痛点,打造适配移动场景的影院票务服务 APP,实现电影购票全流程线上化、场次查询便捷化…

作者头像 李华