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.可以存储一些表结构

相关推荐
摇滚侠37 分钟前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试1 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767162 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_3 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
夕除4 小时前
redis--模型
redis
I Am a robert girl5 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒5 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB5 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB6 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB6 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析