有道无术,术尚可求,有术无道,止于术。
本系列Redis 版本 7.2.5
源码地址:https://gitee.com/pearl-organization/study-redis-demo
文章目录
- 1. 概述
- 2. 常用命令
- 2.1 HSET
- 2.2 HGET
- 2.3 HDEL
- 2.4 HEXISTS
- 2.5 HGETALL
- 2.6 HKEYS
- 2.7 HLEN
- 2.7 HVALS
- 3. 应用场景
1. 概述
Redis Hash
是一个键值对集合,是一个 string
类型的 field
(字段) 和 value
(值) 的映射表,类似 Java
里面中的 Map<String,Object>
,特别适合用于存储对象。
2. 常用命令
Hash
相关的所有命令:
命名 | 描述 |
---|---|
HDEL | 用于删除哈希表中一个或多个字段 |
HEXISTS | 用于判断哈希表中字段是否存在 |
HEXPIRE | 设置一个或多个字段的过期时间,秒为单位 |
HEXPIREAT | HEXPIREAT 具有与HEXPIRE 相同的效果和语义,但它没有指定TTL (生存时间)的秒数,而是使用Unix 时间戳(以秒为单位) |
HEXPIRETIME | 给定key 字段将在该时间点过期,返回自Unix 时间戳(以秒为单位) |
HGET | 获取存储在哈希表中指定字段的值 |
HGETALL | 获取在哈希表中指定 key 的所有字段和值 |
HINCRBY | 为存储在 key 中的哈希表指定字段做整数增量运算 |
HINCRBYFLOAT | 为存储在 key 中的哈希表指定字段值加上指定浮点数增量值 |
HKEYS | 获取存储在 key 中的哈希表的所有字段 |
HLEN | 获取存储在 key 中的哈希表的字段数量 |
HMGET | 用于获取存储在 key 中的哈希表字段的值 |
HMSET | 用于设置存储在 key 中的哈希表字段的值 |
HPERSIST | 删除 key 字段上现有的过期时间 |
HPEXPIRE | 与HEXPIRE 类似,以毫秒为单位 |
HPEXPIREAT | 与HEXPIRE 类似,使用Unix 时间戳 |
HPEXPIRETIME | 与HEXPIRETIME 具有相同的语义,使用Unix 时间戳(以毫秒为单位) |
HPTTL | 与HTTL 一样,返回具有过期设置的字段的剩余TTL (生存时间),但以毫秒而不是秒为单位 |
HRANDFIELD | 随机获取字段和值 |
HSCAN | 返回的每个元素都是一个元组,每一个元组元素由一个字段和值组成 |
HSET | 为哈希表中的字段赋值 |
HSETNX | 用于为哈希表中不存在的的字段赋值 |
HSTRLEN | 返回字段关联的值的字符串长度,如果键或字段不存在,则返回0 |
HTTL | 返回具有过期设置的字段的剩余TTL (生存时间),秒为单位 |
HVALS | 用于获取哈希表中的所有值 |
2.1 HSET
HSET
命令用于为存储在 key
中的哈希表的 field
字段赋值 value
。只有被修改返回0
,有增加返回增加的 field
个数。
注意事项:
- 如果哈希表不存在,一个新的哈希表被创建并进行
HSET
操作。 - 如果字段(
field
)已经存在于哈希表中,旧值将被覆盖。 - 从
Redis 4.0
起,HSET
可以一次设置一个或多个field/value
对。
基本语法:
HSET key field value [field value ...]
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field1 "Hello" field2 "world" field3 "!"
(integer) 2
redis> HGET myhash field1
"Hello"
2.2 HGET
HGET
命令用于返回哈希表中指定字段 field
的值,如果给定的字段或 key
不存在时,返回 nil
。
示例:
redis> HSET myhash field1 "foo"
(integer) 1
# 字段存在
redis> HGET myhash field1
"foo"
# 字段不存在
redis> HGET myhash field2
(nil)
2.3 HDEL
HDEL
命令用于删除哈希表 key
中的一个或多个指定字段,不存在的字段将被忽略。 如果 key
不存在,会被当作空哈希表处理并返回 0
。
基本语法:
HDEL key field [field ...]
示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
2.4 HEXISTS
HEXISTS
命令用于查看哈希表的指定字段 field
是否存在。
返回值:
1
:哈希表含有给定字段field
。0
:哈希表不含有给定字段,或key
不存在。
基本语法:
HEXISTS key field
示例:
redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0
2.5 HGETALL
HGETALL
命令用于返回存储在 key
中的哈希表中所有的字段和值。在返回值里,紧跟每个字段之后是字段的值,所以返回值的长度是哈希表大小的两倍。
基本语法:
HGETALL key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
2.6 HKEYS
HKEYS
返回存储在 key
中哈希表的所有字段。在返回值里,紧跟每个字段之后是字段的值,所以返回值的长度是哈希表大小的两倍。
基本语法:
HKEYS key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"
2.7 HLEN
HLEN
命令用于获取哈希表中字段的数量,当 key
不存在时,返回 0
。
基本语法:
HLEN key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
2.7 HVALS
HVALS
命令返回哈希表所有字段值, 当 key
不存在时,返回空表。
基本语法:
HVALS key
示例:
redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"
3. 应用场景
Hash
数据结构查找快、结构灵活,非常适用于存储一些结构化数据,作为数据库缓存提高读写能力。比如登录用户信息、系统参数信息、配置信息等,同时也支持计数器相关功能。
例如,系统的一些配置参数,都是键值对,适合使用Hash
存储:
例如,存入两个登录页面需要查询的配置参数:
localhost:0>HMSET sys:params login_enabled_dingding true login_enabled_wx false
"OK"
可视化界面显示如下:
可以快速查询配置参数:
localhost:0>HGET sys:params login_enabled_dingding
"true"