微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 node.js REDIS 中替换已弃用的 HMSET

如何解决如何在 node.js REDIS 中替换已弃用的 HMSET

Redis 命令 HMSET 自第 4 版以来一直是 deprecated。他们建议改用 HSET。但是当我尝试这样做时,我得到了一个不同的弃用警告。 我正在使用:db.hmset('key',{a: 1,b: 'c'})。现在我尝试用 db.hset 替换它,但这会触发:

node_redis: Deprecated: The HSET command contains a argument of type Object.
This is converted to "[object Object]" by using .toString() Now and will return an error from v.3.0 on.
Please handle this in your code to make sure everything works as you intended it to.

在 Redis 数据库中存储对象的正确方法是什么?

Redis HSET 的文档指出:“从 Redis 4.0.0 开始,HSET 是可变参数并允许多个字段/值对。”我想存储整个对象,因为它会在数据库中使用 hmset,而不是它的字符串表示。

解决方法

看来 hset 的第二个参数必须是字符串。如果它不是 .toString 将应用于它。但由于它会在您的情况下返回 "[object Object]",因此会触发警告。也许改用 JSON.stringify({a: 1,b: 'c'}) 作为参数

,

here所述,redis 客户端不支持命令参数中的对象。

要轻松地将对象存储在 redis 中,您可以执行以下操作:

db.hset('key',...Object.entries({a: 'a',b: 'b'}),(err) => {
  // ...
});

请注意,它会忽略 Symbol 键,并且仅适用于“平面对象”。

,

HMSET:在这种情况下,如果您想使用 hmset,则意味着您需要将有效负载作为对象传递。示例:

    userData = { name: "John",age: 10 };
    await redis.hmset(`${userKey}`,userData);

HSET:在这种情况下,您将向特定键添加字段和值。因此,如果为了将比原始对象更复杂的对象作为值放入字段,您将需要 JSON.stringify 它。示例:

    johnDataInPersonsKey = { name: "John",age: 10 };
    await redis.hset(`${personsKey}`,`${johnId}`,johnDataInPersonsKey);

如果有什么不明白的,请评论。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。