Redis 7.x 系列【8】数据类型之哈希(Hash)

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

1. 概述

Redis Hash 是一个键值对集合,是一个 string 类型的 field(字段) 和 value(值) 的映射表,类似 Java 里面中的 Map<String,Object>,特别适合用于存储对象。
在这里插入图片描述

2. 常用命令

Hash 相关的所有命令:

命名描述
HDEL用于删除哈希表中一个或多个字段
HEXISTS用于判断哈希表中字段是否存在
HEXPIRE设置一个或多个字段的过期时间,秒为单位
HEXPIREATHEXPIREAT具有与HEXPIRE相同的效果和语义,但它没有指定TTL(生存时间)的秒数,而是使用Unix时间戳(以秒为单位)
HEXPIRETIME给定key字段将在该时间点过期,返回自Unix时间戳(以秒为单位)
HGET获取存储在哈希表中指定字段的值
HGETALL获取在哈希表中指定 key 的所有字段和值
HINCRBY为存储在 key 中的哈希表指定字段做整数增量运算
HINCRBYFLOAT为存储在 key 中的哈希表指定字段值加上指定浮点数增量值
HKEYS获取存储在 key 中的哈希表的所有字段
HLEN获取存储在 key 中的哈希表的字段数量
HMGET用于获取存储在 key 中的哈希表字段的值
HMSET用于设置存储在 key 中的哈希表字段的值
HPERSIST删除 key字段上现有的过期时间
HPEXPIREHEXPIRE类似,以毫秒为单位
HPEXPIREATHEXPIRE类似,使用Unix时间戳
HPEXPIRETIMEHEXPIRETIME具有相同的语义,使用Unix时间戳(以毫秒为单位)
HPTTLHTTL一样,返回具有过期设置的字段的剩余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"
  • 33
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当使用Spring Data Redis的`RedisTemplate`进行操作时,可以使用`executePipelined`方法往Redis中存入哈希类型的数据。 下面是一个示例代码: ```java import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.HashOperations; // 注入RedisTemplate对象 private RedisTemplate<String, Object> redisTemplate; public void saveHashData() { HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash(); // 开启管道 List<Object> results = redisTemplate.executePipelined((RedisCallback<Object>) connection -> { connection.openPipeline(); // 向管道中添加多个命令 hashOps.put("myHash", "field1", "value1"); hashOps.put("myHash", "field2", "value2"); hashOps.put("myHash", "field3", "value3"); // 执行管道中的命令 connection.closePipeline(); return null; }); // 输出结果 System.out.println(results); } ``` 在上面的示例中,我们首先通过注入的`RedisTemplate`创建了一个`HashOperations`对象,该对象用于操作哈希类型的数据。 然后,我们使用`executePipelined`方法开启管道,并在管道中添加了多个命令,即使用`hashOps.put`将字段和值存入哈希类型的数据。最后,我们通过关闭管道来执行这些命令,并将结果保存在`results`列表中。 请确保已正确配置并注入了`RedisTemplate`对象。这样,您就可以使用`executePipelined`方法来批量执行Redis命令,以提高性能。 希望对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云烟成雨TD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值