redis学习笔记(三)—— hash数据类型

前言

在 redis 中,本身就是使用 key-value 哈希表结构来存储数据;

key 是stirng类型,而 value也可以是 hash 类型;

这里 value 哈希类型中的映射关系通常称为 field-value(和reis中的 key-value 区分);而 value 指的是 field 对应的值

常用命令

HSET

复制代码
hset key field value [field value]

设置 hash表中指定的字段的值(设置hash中键值对 field-value);可以一次设置多组键值对(field-value)

返回值:添加键值对的个数

这里 hset命名可以一次设置多组键值对,和 hmset 命令功能一样

HSETNX

复制代码
hsetnx key field value

当字段不存在时,再进行设置 hash 表中的字段和值

返回值:1 表示设置成功,0 表示设置失败

HGET

复制代码
hget key field

获取 hash 表中指定字段对应的值

返回值:返回对应的value或者nil

HMGET

复制代码
hmget key field [field]

获取 hash 表中指定字段 field 对应的值 value(可以一次获取多个value

HEXISTS

复制代码
hexists key field

判断 hash 表中指定字段 field 是否存在

返回值:1 表示存在,0 表示不存在

如果key都不存在,那field肯定也不存在,返回值就是 0

HDEL

复制代码
hdel key field [field]

删除 hash 表中的指定字段

返回值:成功删除的字段的个数

注意:hdel 是删除 key 对应 value 的hash表中的字段,del命令 是删除 key

HKEYS

复制代码
hkeys key

获取 hash 表中的所有字段

hkeys 获取 key 对应 value 的hash表中的所有 field,keys命令是获取所有的 key

HVALS

复制代码
hvals key

获取 hash 表中所有的值(获取 hash 表中的 所有 value

HGETALL

复制代码
hgetall key

获取 hash 表中所有的键值对(field-value)

HLEN

复制代码
hlen key

获取 hash 表中的键值对个数

内部编码

ziplist

ziplist(压缩列表)是Redis为了节省内存而设计的一种紧凑的连续存储结构,并非专门为哈希类型设计,但因其高效的内存利用率,被选为哈希类型在特定条件下的内部实现。

当哈希类型满足以下两个条件时,Redis会优先使用ziplist作为内部实现:

  1. 哈希中的元素个数小于 hash-max-ziplist-entries 配置值(默认值为512个);
  2. 哈希中所有元素的值的长度都小于 hash-max-ziplist-value 配置值(默认值为64字节)。

hashtable

hashtable(哈希表)是Redis中另一种核心的内部实现,我们熟悉的字符串类型(当值较大时)、集合类型等也会用到它。对于哈希类型而言,当无法满足上述ziplist的两个条件时,Redis会自动将内部实现切换为hashtable。

ziplist虽然节省内存,但它的结构决定了其读写效率会随着元素数量和值长度的增加而下降:当元素增多、值变大时,ziplist的插入、删除、查找操作需要频繁地移动内存中的数据,时间复杂度会逐渐升高。

而hashtable的优势恰恰在于高效的读写性能------它通过哈希函数将元素映射到不同的桶中,无论是插入、删除还是查找操作,平均时间复杂度都能稳定在O(1)。当哈希中的元素数量较多(超过512个),或者存在值长度较大(超过64字节)的元素时,hashtable能够保证读写操作的高效性,避免因ziplist的性能瓶颈影响整体服务效率。

相关推荐
STLearner4 分钟前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
redaijufeng13 分钟前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
九成宫23 分钟前
IT项目管理期末复习——Chapter 10 项目沟通管理
笔记·项目管理·软件工程
腾科IT教育25 分钟前
零基础快速上岸HCIP,高效学习思路分享
学习·华为认证·hcip·hcip考试·hcip认证
234710212726 分钟前
4.14 学习笔记
笔记·python·学习
醇氧27 分钟前
【学习】软件过程模型全解析:从瀑布到敏捷的演进之路
学习·log4j
邪修king1 小时前
UE5 零基础入门第三弹: 碰撞与触发交互,解锁场景机关与蓝图封装(高娱乐性学习)
学习·ue5·交互
sonnet-10292 小时前
函数式接口和方法引用
java·开发语言·笔记
skylijf2 小时前
2026 高项第 6 章 预测考点 + 练习题(共 12 题,做完稳拿分)
笔记·程序人生·其他·职场和发展·软件工程·团队开发·产品经理
今天你TLE了吗2 小时前
LLM到Agent&RAG——AI概念概述 第二章:提示词
人工智能·笔记·后端·学习