Redis 8.0-M04新增命令介绍(HGETDEL 、HSETEX和HGETEX)¶
Redis前天深夜释出了最新的Redis 8预览版8.0 M04,新增了HGETDEL
、HSETEX
和HGETEX
三个命令。
这些命令可以看作是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...]
这个命令带有多个可选项以供使用,其中:
EX
、PX
、EXAT
、PXAT
和KEEPTTL
等选项的作用跟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的最新动态,有新消息再跟大家分享,欢迎大家关注我的博客和社交媒体。