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

相关推荐
tatasix12 分钟前
MySQL UPDATE语句执行链路解析
数据库·mysql
秋意钟17 分钟前
缓存雪崩、缓存穿透【Redis】
redis
南城花随雪。25 分钟前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了26 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度28 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
简 洁 冬冬29 分钟前
046 购物车
redis·购物车
天海华兮30 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
soulteary1 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
FIN技术铺1 小时前
Spring Boot框架Starter组件整理
java·spring boot·后端
gma9991 小时前
Etcd 框架
数据库·etcd