如何解决如何在 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 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 举报,一经查实,本站将立刻删除。