Redis---hash类型

value类型为hash类型

H系列的命令,必须要保证value得是hash类型

如图所示:

HSET

设置value为hash类型的键值对

操作格式:

hset key field value field value...

举个例子:

cpp 复制代码
//对key1的value设置多组键值对
hset key1 f1 111 f2 222 f3 333
返回值:

设置成功的键值对个数

HGET

操作格式:

hget key field

返回值:

该field对应的value,找不到返回空(nil)

HEXISTS

操作格式:

hexists key field

返回值:

1表示存在,0表示不存在

举个例子:

cpp 复制代码
//设置一个键值对
hset key1 field1 value1
//查找field对应的value
hexists key1 field1

HDEL

删除hash中的指定字段

注意:

del删除的是key

hdel删除的是field

操作格式:

hdel key field field...

返回值:

本次操作删除字段的个数

举个例子:

cpp 复制代码
hset key1 field1 value1
hdel key1 field1

HKEYS

获取hash中key对应的所有field字段

操作格式:

hkeys key

举个例子:

cpp 复制代码
hset key1 field1 value1
hkeys key1
时间复杂度:

O(N),N为key设置的field的个数,这种情况我们可以将其看作O(1)

HVALUES

获取hash中key对应的所有value字段

操作格式:

hvalues key

举个例子:

cpp 复制代码
hset key1 field1 values1
hvalues key1
时间复杂度:

O(N)

注意:

hkeys/hvalues如果查询到的数据量过大,可能导致redis长时间执行不完该命令,导致阻塞其它请求,进而导致大量请求去请求mysql,导致搞崩溃mysql,与keys *差不多

HGETALL

获取该key对应的全部field和value

HMGET

一次查询多个field

操作格式:

hmget field field...

hekeys,hvalues,hgetall均存在一定风险,可能将服务器搞崩,想要全部遍历更推荐hscan

HSCAN

它属于渐进式遍历,意思是敲一次,遍历一小部分,多敲几次,也可以遍历完全部数据

HLEN

获取values对应的哈希结构,存储多少个元素

操作格式:

hlen key

时间复杂度:

O(1),因为拿取个数时,是不需要遍历的,而是选择,存储其现有个数,并将其返回,所以时间复杂度是O(1)

举个例子:

cpp 复制代码
hset key1 f1 111 f2 222 f3 333
hlen key1

HSTENX

类似于stenx,不存在的时候才能设置成功,如果存在则失败

HINCRBY/HINCRBYFLOAT

hincrby增加n个整数,hincrbyfloat增加n个小数

注意:

value为hash类型,并没有提供incr,decr等

操作格式:

hincrby key field number

举个例子:

cpp 复制代码
hset key1 field1 10
hincrby key1 field1 -10
时间复杂度:

O(1)

哈希编码方式

**ziplist(压缩列表):**当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个),同时所有值大小都小于hash-max-ziplist-value配置(默认64字节)时,redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省空间方面上比hashtable更加优秀

**hashtable:**正常的哈希结构

压缩的本质:

压缩的本质就是对数据仅从重新的编码

不同的数据,有不同的特点,在进行精妙的设计后,重新编码,就能够缩小体积

举个例子:

对abbcccddddeeeee重新编码1a2b3c4d5e

ziplist也是同理,内部数据结构也是经过精心设计的

所以在哈希中,元素个数比较少,value的值长度都比较短的情况下会使用ziplist结构

修改这两个配置文件,hash-max-ziplist-entries/hash-max-ziplist-value,可以修改大小为多少在进行容器的切换

这部分知识在进行比较精细的调优工作时还是比较有意义的

使用场景

1.可以存储一些表结构

相关推荐
风哥2号5 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构
数据库·mysql
YangYang9YangYan6 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
西安栈上月明软件科技7 小时前
从业务黑话到本体图谱:OAG本体建模五步法(西安老系统AI化改造实战)
数据库·人工智能·架构
anxiao_m7 小时前
跨云跨机房大数据迁移怎么选?不同场景工具适配指南
数据库·云启快传
夕除9 小时前
redis--015
redis
风哥2号9 小时前
数据库教程FGMT43‑MySQL性能分析与优化调整
数据库·mysql
随身数智备忘录10 小时前
财务数据分析如何与业务场景结合?财务数据分析如何从数出有据到数出有用?
数据库
这个DBA有点耶11 小时前
数据库教程:从零基础到实战的完整学习路径(2026版)
数据库·程序员·代码规范
forestsea11 小时前
从零构建 Java 智能体 RAG 系统:Milvus 向量数据库实战指南
java·数据库·milvus
probex_12 小时前
从 ByConity 到 VictoriaMetrics:一次指标数据迁移引发的四种存储对比
数据库