【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的编码方式

相关推荐
冷崖21 分钟前
Redis缓存策略以及bigkey的学习(九)
redis·学习·缓存
Code季风24 分钟前
Spring AOP 与事务管理进阶:传播行为原理与实战指南
java·spring boot·spring
betazhou37 分钟前
SQL server 2019删除重建用户
数据库·sql server
MickeyCV1 小时前
MySQL数据库本地迁移到云端完整教程
服务器·数据库·mysql·oracle
IT邦德1 小时前
OGG同步Oracle到Kafka不停库,全量加增量
数据库·oracle·kafka
武昌库里写JAVA1 小时前
vue+iview+i18n国际化
java·开发语言·spring boot·学习·课程设计
你我约定有三1 小时前
RabbitMQ--Springboot解决消息丢失
java·spring boot·rabbitmq·java-rabbitmq
菠萝催学1231 小时前
日志配置Slf4j
java·数据库·spring·tomcat·maven·intellij-idea
bilin_jam1 小时前
C++查询mysql数据
数据库·c++·mysql
爱吃糖的小秦同学2 小时前
MySQL 8.4.4详细下载安装配置
数据库·mysql