Redis 8.0-M04新增命令介绍(HGETDEL 、HSETEX和HGETEX)

Redis前天深夜释出了最新的Redis 8预览版8.0 M04,新增了HGETDELHSETEXHGETEX三个命令。 这些命令可以看作是Redis在7.4版本新增哈希字段自动过期特性之后,对哈希功能的进一步补充和完善。

本文将对上述三个命令进行介绍。

HGETDEL命令

HGETDEL命令可以根据给定的一个或多个字段从哈希中取出与之对应的值,并在之后将所有给定字段从哈希中移除:

HGETDEL <key> FIELDS <numfields> field [field ...]

除了需要使用FIELDS选项指定字段数量之外,这个命令的参数跟获取多个字段值的HMGET命令没什么不同。HGETDEL命令将以列表形式返回每个给定字段的值;如果某个字段不存在则以nil值代替。

以下是HGETDEL命令的使用示例:

127.0.0.1:6379> HMSET hash f1 v1 f2 v2 f3 v3
OK  -- 创建一个包含三个字段的哈希
127.0.0.1:6379> HGETDEL hash FIELDS 4 f1 f2 f3 f10086
1) "v1"  -- 给定字段的值
2) "v2"
3) "v3"
4) (nil)  -- 给定字段不存在
127.0.0.1:6379> HGETALL hash
(empty array)  -- 哈希中的三个字段已被删除

Note

话说似乎没看出HGETDEL命令中FIELDS选项存在的必要性,像是这样:

HGETDEL hash f1 f2 f3

不是会更简洁吗,难道只是为了跟其他哈希自动过期相关命令保持一致?

HSETEX命令

HSETEX命令可以为哈希中的一个或多个字段设置值以及(可选的)过期时间:

HSETEX <key>
   [FNX | FXX]
   [EX sec | PX ms | EXAT ts | PXAT ts-in-ms | KEEPTTL]
   FIELDS <numfields> field value [field value...]

这个命令带有多个可选项以供使用,其中:

  • EXPXEXATPXATKEEPTTL等选项的作用跟SET命令中同名选项的作用类似;

  • FNX选项表示仅在所有给定字段都不存在的情况下进行设置(类似于SET命令的NX选项),而FXX选项则表示仅在所有给定字段都已存在的情况下进行设置(类似于SET命令的XX选项);

HSETEX命令在所有字段均设置成功时返回1,没有任何字段被设置时返回0

以下是HSETEX命令的使用示例:

127.0.0.1:6379> HSETEX hash EX 300 FIELDS 2 f1 v1 f2 v2
(integer) 1  -- 设置两个字段并将它们的生存时间设置为300秒
127.0.0.1:6379> HGETALL hash
1) "f2"  -- 查看哈希的设置情况
2) "v2"
3) "f1"
4) "v1"
127.0.0.1:6379> HTTL hash FIELDS 2 f1 f2
1) (integer) 274  -- 查看两个字段的剩余生存时间
2) (integer) 274

HGETEX命令

HGETEX命令可以在获取哈希中一个或多个字段值的同时,为字段设置过期时间:

HGETEX <key>
   [EX sec | PX ms | EXAT ts | PXAT ts-in-ms | PERSIST]
   FIELDS <numfields> field [field ...]

该命令所有可选项的意义都跟HSETEX命令的同名可选项一样,而PERSIST选项则用于移除给定字段的过期时间。HGETEX命令将以列表形式返回所有给定字段的值;如果某个字段不存在则以nil值代替。

以下是HGETEX命令的使用示例:

127.0.0.1:6379> HMSET hash f1 v1 f2 v2 f3 v3
OK  -- 创建一个包含三个字段的哈希
127.0.0.1:6379> HGETEX hash EX 600 FIELDS 3 f1 f2 f3
1) "v1"  -- 获取三个字段的值并为每个字段设置过期时间
2) "v2"
3) "v3"
127.0.0.1:6379> HTTL hash FIELDS 3 f1 f2 f3
1) (integer) 594  -- 查看三个字段的过期时间
2) (integer) 594
3) (integer) 594

结语

好的,关于这三个新命令的简单介绍就到这里结束。

我会继续关注Redis 8的最新动态,有新消息再跟大家分享,欢迎大家关注我的博客和社交媒体

黄健宏
2025.3.22