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

相关推荐
哈__1 小时前
MCP 协议落地实践:国产化数据库 AI 一站式 SQL 诊断调优方案
数据库·人工智能·sql
一招合理1 小时前
Accordion:一种HBase内存压缩算法
大数据·数据库·hbase
明亮 Blog1 小时前
Wi-Fi 6/7的物联网“芯”机遇:高带宽低延时如何重塑智慧工厂的AGV物流革命
服务器·网络·数据库
枫叶丹2 小时前
告别“人肉”搬砖:当AI助手直连数据库,SQL优化从未如此简单
数据库
zyplayer-doc2 小时前
企业文档的进化:网盘和在线文档的下一个升级方向—知识库系统
java·大数据·数据库·人工智能·ocr
Leon-Ning Liu2 小时前
【真实经验分享】Oracle RAC 修改 db_file_name_convert / log_file_name_convert 参数实践
数据库·oracle
影寂ldy2 小时前
C# 多线程进阶知识点(线程优先级、多委托传参、线程锁、死锁)
开发语言·数据库·c#
Leon-Ning Liu2 小时前
【真实经验分享】Oracle RAC + ASM 下 db_recovery_file_dest 路径格式导致 ORA-01261 无法 NOMOUNT
数据库·oracle
Channing Lewis2 小时前
mysql修改了密码之后,已连接的mysql workbench还能访问吗
数据库·mysql