Redis中Hash类型相关命令介绍

 更新时间:2025年12月09日 10:58:33   作者:鸽鸽程序猿  
Redis hash是一个String类型的field和value的映射表,hash特别适合用于存储对象,这篇文章主要介绍了Redis中Hash类型相关命令的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、简介

在 Redis 中,哈希类型是指值本⾝⼜是⼀个键值对结构,形如 key = “key”,value = { { field1, value1 }, …, {fieldN, valueN} },在Redis中为了与key - value作区分,将Hash类型键值对结构表示为filed - value。

String与Hash对比图:

二、相关命令

2.1 hset 和 hget

hset: 设置 hash 中指定的字段(field)的值(value)。

语法:hset key field value [field value ...]
命令有效版本:2.0.0 之后

时间复杂度:插⼊⼀组 field 为 O(1), 插⼊ N 组 field 为 O(N)

返回值:添加的字段的个数。

也可以当修改字段的效果:

hget:获取 hash 中指定字段的值。

语法:hget key filed

命令有效版本:2.0.0 之后

时间复杂度:O(1)

返回值:字段对应的值或者 nil。

2.2 hexists

hexists判断 hash 中是否有指定的字段。

语法:hexists key filed

命令有效版本:2.0.0 之后

时间复杂度:O(1)

返回值:1 表⽰存在,0 表⽰不存在。

2.3 hdel

hdel删除 hash 中指定的字段。

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

命令有效版本:2.0.0之后

时间复杂度:删除⼀个元素为 O(1). 删除 N 个元素为 O(N).

返回值:本次操作删除的字段个数。

2.4 hkeys

hkeys获取 hash 中的所有字段。

语法:hkeys key

命令有效版本:2.0.0 之后

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

返回值:字段列表。

2.5 hvals

hvals 获取 hash 中的所有的值。

语法:hvals key

命令有效版本:2.0.0 之后

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

返回值:Hash所有value列表。

2.6 hgetall

hgetall获取 hash 中的所有的字段和值。

语法:hgetall key

命令有效版本:2.0.0 之后

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

返回值:Hash所有字段和对应的值。

2.7 hmget

hmget⼀次获取 hash 中多个字段的值。

hmget key field [field ...]

命令有效版本:2.0.0 之后

时间复杂度:只查询⼀个元素为 O(1), 查询多个元素为 O(N), N 为查询元素个数.

返回值:字段对应的值或者 nil。

2.8 hlen

hlen获取 hash 中的所有字段的个数。

语法:hlen key

命令有效版本:2.0.0 之后

时间复杂度:O(1)

返回值:字段个数。

2.9 hsetnx

hsetnx在字段不存在的情况下,设置 hash 中的字段和值。

语法:hsetnx key field value

命令有效版本:2.0.0 之后

时间复杂度:O(1)

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

2.10 hincrby

hincrby将 hash 中字段对应的数值(必须是整数)添加指定的值。

语法: hincrby key field increment

命令有效版本:2.0.0之后

时间复杂度:O(1)

返回值:该字段变化之后的值。

2.11 hincrbyfloat

hincrbyfloathincrby的浮点数版本, 将 hash 中字段对应的数值(可以是整数和浮点数)添加指定的值。

语法: hincrbyfloat key field increment

命令有效版本:2.6.0之后

时间复杂度:O(1)

返回值:该字段变化之后的值。

2.12 小结

命令执⾏效果时间复杂度
hset key field value设置值O(1)
hget key field获取值O(1)
hdel key field [field …]删除 fieldO(k), k 是 field 个数
hlen key计算 field 个数O(1)
hgetall key获取所有的 field-valueO(k), k 是 field 个数
hmget key field [field …]批量获取 field-valueO(k), k 是 field 个数
hmset key field value [field value …]批量获取 field-valueO(k), k 是 field 个数
hexists key field判断 field 是否存在O(1)
hkeys key获取所有的 fieldO(k), k 是 field 个数
hvals key获取所有的 valueO(k), k 是 field 个数
hsetnx key field value设置值,但必须在 field 不存在时才能设置成功O(1)
hincrby key field n对应 field-value +nO(1)
hincrbyfloat key field n对应 field-value +nO(1)
hstrlen key field计算 value 的字符串⻓度O(1)

三、编码方式

哈希的内部编码有两种:

  • ziplist(压缩列表):当哈希类型元素个数⼩于 hash-max-ziplist-entries 配置(默认 512 个)、同时所有值都⼩于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使⽤ ziplist 作为哈希的内部实现,ziplist 使⽤更加紧凑的结构实现多个元素的连续存储,所以在节省内存⽅⾯⽐ hashtable 更加优秀。
  • hashtable(哈希表):当哈希类型⽆法满⾜ ziplist 的条件时,Redis 会使⽤ hashtable 作为哈希的内部实现,因为此时 ziplist 的读写效率会下降,⽽ hashtable 的读写时间复杂度为 O(1)。

四、应用场景

4.1 作为缓存

存储结构化的数据的时候,使用 hash 更加合适。

使用hash表示:

总结 

到此这篇关于Redis中Hash类型相关命令介绍的文章就介绍到这了,更多相关Redis Hash类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Redis实现短信验证码登录功能

    基于Redis实现短信验证码登录功能

    对于我们用户来讲,我们在登陆一个APP的时候,有很多种登陆方式,比如"微信扫码"、"手机号登陆"、"支付宝扫码"、"账号密码登录",现在大多都会要求微信扫码登录或者是手机号验证码登录,所以本文给大家介绍了基于Redis实现短信验证码登录功能,需要的朋友可以参考下
    2025-01-01
  • Redis的字符串是如何实现的

    Redis的字符串是如何实现的

    本文主要介绍了Redis的字符串是如何实现的,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Redis分布式锁的实现方式(redis面试题)

    Redis分布式锁的实现方式(redis面试题)

    这篇文章主要介绍了Redis分布式锁的实现方式(面试常见),需要的朋友可以参考下
    2020-01-01
  • Redis整合Lua脚本的实现操作

    Redis整合Lua脚本的实现操作

    Redis对lua脚本的支持是从Redis2.6.0版本开始引入的,它可以让用户在Redis服务器内置的Lua解释器中执行指定的lua脚本,本文就来介绍一下Redis整合Lua脚本的实现,感兴趣的可以了解一下
    2024-03-03
  • Redis哨兵模式的实现

    Redis哨兵模式的实现

    Redis的哨兵模式是一种用于自动监控Redis实例状态并在主服务器出现故障时自动切换到从服务器的机制,本文主要介绍了Redis哨兵模式的实现,感兴趣的可以了解一下
    2024-02-02
  • Redis 在真实世界的 5 个用法

    Redis 在真实世界的 5 个用法

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API这篇文章主要介绍了Redis 在真实世界的 5 个用法,需要的朋友可以参考下
    2018-03-03
  • Redis keys命令的具体使用

    Redis keys命令的具体使用

    本文主要介绍了Redis keys命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 深入解析Redis的LRU与LFU算法实现

    深入解析Redis的LRU与LFU算法实现

    这篇文章主要重点介绍了Redis的LRU与LFU算法实现,并分析总结了两种算法的实现效果以及存在的问题,并阐述其优劣特性,感兴趣的小伙伴跟着小编一起来看看吧
    2023-07-07
  • Redis如何实现延迟队列

    Redis如何实现延迟队列

    这篇文章主要介绍了Redis如何实现延迟队列问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Redis批量删除指定前缀的Key两种方法

    Redis批量删除指定前缀的Key两种方法

    redis作为缓存服务器在项目中经常使用,使用redis存储数据时,我们经常会将key分组,这篇文章主要给大家介绍了关于Redis批量删除指定前缀的Key两种方法,需要的朋友可以参考下
    2024-01-01

最新评论