速通Redis基础(二):掌握Redis的哈希类型和命令

目录

[Redis 哈希类型简介](#Redis 哈希类型简介)

[Redis 哈希命令](#Redis 哈希命令)

HSET

HGET

HEXISTS

HDEL

HKEYS

HVALS

HGETALL

HMGET

HLEN

HSETNX

​编辑

HINCRBY

HINCRBYFLOAT

Redis的哈希类型命令小结


Redis 是一种高性能的键值存储数据库,支持多种数据类型,其中之一就是哈希(Hash)。哈希是一种键值对的集合,适合存储对象的属性或配置参数等信息。在本文中,我们将深入探讨 Redis 的哈希类型及其相关命令。

Redis 哈希类型简介

哈希类型是 Redis 的一种数据结构,它以键值对的方式存储多个字段和对应的值,每个字段都是一个字符串。哈希适用于存储具有多个属性的对象,例如用户信息、产品属性、配置参数等。哈希类型的键可以是字符串,但字段名必须是唯一的。

下面是一个示例:

复制代码
HMSET user:1 username "john" age 30 email "john@example.com"

在上面的例子中,我们创建了一个名为 user:1 的哈希类型,它包含了用户名、年龄和电子邮件地址这三个字段和对应的值。

接下来,让我们了解一些常用的 Redis 哈希命令。

Redis 哈希命令

HSET

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

语法:

复制代码
HSET key field value [field value ...]

**时间复杂度:**插入一组 field 为 O(1), 插入 N 组 field 为 O(N)

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

HGET

获取 hash 中指定字段的值。

语法:

HGET key field

复制代码
HGET key field

**时间复杂度:**O(1)

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

示例:


HEXISTS

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

语法:

复制代码
HEXISTS key field

**时间复杂度:**O(1)

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

示例:

HDEL

删除 hash 中指定的字段。

语法:

复制代码
HDEL key field [field ...]

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

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

示例:

HKEYS

获取 hash 中的所有字段。

语法:

复制代码
HKEYS key

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

**返回值:**字段列表。

HVALS

获取 hash 中的所有的值。

语法:

复制代码
 HVALS key

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

**返回值:**所有的值。

示例:

HGETALL

获取 hash 中的所有字段以及对应的值。

语法:

复制代码
HGETALL key

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

**返回值:**字段和对应的值。

示例:

HMGET

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

语法:

复制代码
HMGET key field [field ...]

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

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

示例:

HLEN

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

语法:

复制代码
HLEN key

**时间复杂度:**O(1)

**返回值:**字段个数。

示例:

HSETNX

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

语法:

复制代码
HSETNX key field value

**时间复杂度:**O(1)

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

示例:

HINCRBY

将 hash 中字段对应的数值添加指定的值。

语法:

复制代码
HINCRBY key field increment

**时间复杂度:**O(1)

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

示例:

HINCRBYFLOAT

HINCRBY 的浮点数版本。

语法:

复制代码
HINCRBYFLOAT key field increment

**时间复杂度:**O(1)

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

Redis的哈希类型命令小结

|---------------------------------------|---------------------------|--------------------|
| 命令 | 执行效果 | 时间复杂度 |
| hset key field value | 设置值 | O(1) |
| hget key field | 获取值 | O(1) |
| hdel key field [field ...] | 删除 field | O(k), k 是 field 个数 |
| hlen key | 计算 field 个数 | O(1) |
| hgetall key | 获取所有的 field-value | O(k), k 是 field 个数 |
| hmget field [field ...] | 批量获取 field-value | O(k), k 是 field 个数 |
| hmset field value [field value ...] | 批量获取 field-value | O(k), k 是 field 个数 |
| hexists key field | 判断 field 是否存在 | O(1) |
| hkeys key | 获取所有的 field | O(k), k 是 field 个数 |
| hvals key | 获取所有的 value | O(k), k 是 field 个数 |
| hsetnx key field value | 设置值,但必须在 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) |

制作不易,希望大家多多支持噢~~🤗

相关推荐
用户685453759776926 分钟前
同步成本换并行度:多线程、协程、分片、MapReduce 怎么选才不踩坑
后端
javaTodo34 分钟前
Claude Code 记忆机制详解:从 CLAUDE.md 到 Auto Memory,六层体系全拆解
后端
LSTM971 小时前
使用 C# 和 Spire.PDF 从 HTML 模板生成 PDF 的实用指南
后端
JaguarJack1 小时前
为什么 PHP 闭包要加 static?
后端·php·服务端
BingoGo1 小时前
为什么 PHP 闭包要加 static?
后端
是糖糖啊2 小时前
OpenClaw 从零到一实战指南(飞书接入)
前端·人工智能·后端
百度Geek说2 小时前
基于Spark的配置化离线反作弊系统
后端
Java编程爱好者2 小时前
虚拟线程深度解析:轻量并发编程的未来趋势
后端
苏三说技术2 小时前
Spring AI 和 LangChain4j ,哪个更好?
后端