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的性能瓶颈影响整体服务效率。

相关推荐
承渊政道13 分钟前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
AI-Ming35 分钟前
程序员转行学习 AI 大模型: 踩坑记录:服务器内存不够,程序被killed
服务器·人工智能·python·gpt·深度学习·学习·agi
m0_7167652338 分钟前
C++提高编程--STL常用容器(set/multiset、map/multimap容器)详解
java·开发语言·c++·经验分享·学习·青少年编程·visual studio
2501_9453184941 分钟前
零基础学习AI的选型指南:CAIE认证与编程型AI认证如何取舍
人工智能·学习
承渊政道1 小时前
【优选算法】(实战推演模拟算法的蕴含深意)
数据结构·c++·笔记·学习·算法·leetcode·排序算法
Keep learning!1 小时前
PCA主成分分析学习
学习·算法
浮白载笔的夜晚1 小时前
【科普向】模拟电路(Analog Circuits)与射频电路(RF Circuits)的区别
学习
Yilena2 小时前
带你轻松学习LangChain4j
java·学习·langchain
左左右右左右摇晃2 小时前
系统性能指标与损耗分析
笔记
是翔仔呐2 小时前
第13章 SPI通信协议全解:底层时序、4种工作模式与W25Qxx Flash芯片读写实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee