【Redis】Hash类型的常用命令

背景:redis中存储数据采取key-value键值对的形式,而hash内部也是键值对,为了区别这两个东西,hash内部的键值对称为:field-value,而redis的为key-value,这里的value包括:field-value。

对于hash类型的命令和String很像,大多数是在前面加上h,表示hash的意思

1.命令小结
命令 含义 时间复杂度
hset key field value 设置值 O(1)
hget key field 获取值 O(1)
hdel key field [field ...] 删除field O(n)
hlen key 计算field个数 O(1)
hgetall field [field ...] 获取所有的field-value O(n)
hmget field [field ...] 批量获取field-value O(n)
hexists key field 判断field是否存在 O(1)
hkeys key 获取所有的field O(n)
hvals key 获取所有的value O(n)
hsetnx key field value 设置field值,field不存在时成功 O(1)
hincrby key field n 对应field-value+n O(1)
hincrbyfloat key field n 对应field-value+n(浮点数版) O(1)
hstrlen key field 计算value的字符串长度 O(1)
2.hash命令详解

(1)hset

语法:hset key field value [field value ......]

含义:设置键值对

返回值:设置成功后的field-value键值对的个数

时间复杂度:O(N),N为插入的个数

(2)hget

语法:hget key field

返回值:返回field对应的value,每次只能获取一个

时间复杂度:O(1)

(3)hexists

语法:hexists key field

含义:判断hash中指定的字段是否存在

返回值:1表示存在,0表示不存在

时间复杂度:O(1)

(4)hdel

语法:hdel key field [field ...]

含义:删除hash中指定的字段(删除的是field而不是key)

返回值:成功删除的field个数

时间复杂度:O(N),N为删除field的个数

(5)hkeys

语法:hkeys key

含义:获取hash中所有的field

时间复杂度:O(N),N为field的个数

(6)hvals

语法:hvals key

含义:返回所有的value(field对应的value)

时间复杂度:O(N),N为value的个数

(7)hgetall

语法:hgetall key

含义:获取hash中所有的field-value

时间复杂度:O(N),N为field的个数

(8)hmget

语法:hmget key field [field ...]

含义:返回hash中指定的field(可以同时查询多个field)

时间复杂度:O(N),N为查询field的个数

(9)hlen

语法:hlen key

含义:返回key对应的hash中所有字段的个数(field个数)

时间复杂度:O(1)

存在个数:

不存在:

(10)hsetnx

语法:hsetnx key field value

含义:在field不存在的时候才能设置成功

返回值:1表示设置成功,0表示失败

时间复杂度:O(1)

(11)hincrby

语法:hincrby key field increment

含义:将hash中指定字段对应的数值添加指定的值

时间复杂度:O(1)

(12)hincybyfloat

语法:hincybyfloat key field increment

含义:将hash中指定字段对应的数值添加指定的值(浮点数版本)

时间复杂度:O(1)

(13)hstrlen

语法:hstrlen key field

含义:计算value的字符串长度

时间复杂度:O(1)

3.hash编码方式

哈希内部编码的方式有两种:ziplist和hashtable。

(1)ziplist(压缩列表)

含义:两种情况都满足,redis就会采取该种编码方式。第一种:元素个数小于一定值(默认hash-max-ziplist-entries为512个)第二种:hash中所有的value值小于一定字节(hash-max-ziplist-value默认为64字节),同时满足才会采取ziplist编码方式。这种编码方式会更加的节省内存

(2)hashtable(哈希表)

下面让hash中的value过长,看一下hashtable的编码方式

相关推荐
m0_7482309410 分钟前
Redis 通用命令
前端·redis·bootstrap
浪九天15 分钟前
Orcale、MySQL中参数类型的详解和运用场景(不带示例)
数据库·mysql·oracle
程序员阿鹏18 分钟前
jdbc批量插入数据到MySQL
java·开发语言·数据库·mysql·intellij-idea
m0_748247551 小时前
springboot中配置logback-spring.xml
spring boot·spring·logback
m0_748250031 小时前
springboot使用logback自定义日志
java·spring boot·logback
程序猿熊跃晖1 小时前
多环境日志管理:使用Logback与Logstash集成实现高效日志处理
spring boot·elk·logback
KingDol_MIni2 小时前
Spring Boot 集成 T-io 实现客户端服务器通信
java·服务器·spring boot
后端码匠2 小时前
Spring Boot3+Vue2极速整合:10分钟搭建DeepSeek AI对话系统
人工智能·spring boot·后端
计算机-秋大田2 小时前
基于Spring Boot的农产品智慧物流系统设计与实现(LW+源码+讲解)
java·开发语言·spring boot·后端·spring·课程设计
Struggle Sheep2 小时前
linux安装redis
linux·运维·redis