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

相关推荐
数据库小学妹5 小时前
数据库等保三级和四级有什么区别?从访问控制到备份恢复的完整对比
数据库·安全·数据库安全·三级等保·等保合规·四级等保
看浪的路人6 小时前
第3讲:手写第一个 MCP Server(Python SDK)
jvm·数据库·oracle
大眼、不聚光7 小时前
5.mysql--主从同步安装部署
数据库·mysql
Yan_chen6667 小时前
SQL-LABS_Less18-20实战攻略
数据库·sql·web安全·网络安全
oradh7 小时前
Oracle RAC OCR维护操作总结
数据库·oracle·ocr·rac ocr维护·ocr维护·vote disk
snow@li8 小时前
HikariCP:高性能数据库连接池全景深入梳理
java·数据库
一个天蝎座的程序猿9 小时前
传统数据库迁金仓KES,空值问题差点让财务报表翻车
数据库
wWYy.9 小时前
Mysql:索引下推
数据库·mysql
风123456789~10 小时前
【Oracle专栏】ORA-02069: global_names 参数
数据库·oracle
ningmengjing_10 小时前
Redis 从入门到实战:Python操作全攻略
数据库·redis·python