如何使用哈希映射(HSET)在 Redis 中存储 JSON?

4

我有一个关于 Redis 中 HSET 的问题。据我所知,Redis 是一个键值数据库。这意味着每个东西都存储为键值对,我们没有例如表这样的东西。 我想要在 Redis 中保存一些东西,所以我决定使用哈希表。由于 HMSET 已经被弃用了,我们应该使用 HSET,但是如何将许多属性作为值和 ID 作为键存储在 HSET 中呢? 你知道我想要保存像这样的一些东西:

await redis.hset(`origin-${originId}`, 'title',title)

但是如果我有许多字段要保存,我需要为每个字段编写这一行吗?例如:

await redis.hset(`origin-${originId}`, 'title',title)
await redis.hset(`origin-${originId}`, 'status',status)
...

在 HSET 中,我们需要定义三个参数,我编写了这段代码。有更好的解决方案吗?


你有查看redisjson.io吗? - Guy Korland
@GuyKorland 不,我应该如何在我的示例中使用它? - Fateme Ahmadi
你有看过这篇文章吗? - Praga_t
@Praga_t 这是针对支持 hmset 的旧版本。但我的问题是在 Redis 5 版本中的 hset。 - Fateme Ahmadi
2个回答

7

你可以做到这一点

hset key field1 value1 field2 value2 ...

这里有相关文档https://redis.io/commands/hmsethttps://redis.io/commands/hset。不过需要注意的是,hmset已经被弃用了,建议使用hset,因为它支持和hmset一样的参数。如果你在node.js中已经有了键/值对的对象,可以这样做。
await redis.hset('myhashset', { field1: value1, field2: value2 })

我执行此操作时出现以下错误:ReplyError: ERR wrong number of arguments for 'hset' command。 - Fateme Ahmadi
你很可能使用的是旧版的 Redis。这个功能从 Redis 4 开始支持,当前版本是 5。能否请检查一下你的 Redis 版本?如果不支持的话,可以直接使用 hmset - Tuan Anh Tran
我的 Redis 服务器版本是 4.0.9,ioredis 客户端版本是 4.14.1。 - Fateme Ahmadi
1
ioredis -> 使用 hmset,但是有一个修复方法,但尚未发布,请参见(https://github.com/luin/ioredis/pull/1012) - Itamar Haber

0
我发现我的问题出在我的 Redis 客户端上。我的 Redis 版本是 5,但我的 Redis 客户端不支持 Redis 5 中的新功能。 所以我使用了 ioredis,这个 Redis 客户端现在支持 hmset。此外,有一个修复该问题的补丁,但尚未发布,请参见 enter link description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接