【问题标题】:How to replace deprecated HMSET in in node.js REDIS如何在 node.js REDIS 中替换已弃用的 HMSET
【发布时间】:2021-05-08 21:40:19
【问题描述】:

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 一样,而不是它的字符串表示。

【问题讨论】:

    标签: javascript node.js redis node-redis


    【解决方案1】:

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

    【讨论】:

    • Redis HSET 的文档指出:“从 Redis 4.0.0 开始,HSET 是可变参数,并允许多个字段/值对。”您的解决方案与做 HMSET 不同。因为那只会保存一个字符串。我想将整个对象存储在数据库中。
    • 然后修改您的问题,您希望设置的值和哈希值究竟是什么?因为您可以只保存对象的 json 表示形式,然后在获取它时对其进行解析
    【解决方案2】:

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

    要在 redis 中轻松存储对象,您可以这样做:

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

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

    【讨论】:

    • 这和做对象有同样的问题。它会触发警告:node_redis: Deprecated: The HSET command contains a argument of type Array. This is converted to “a,a” by using .toString() now and will return an error from v.3.0 on.
    • 我忘记传播条目了,检查编辑版本
    【解决方案3】:

    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);
    

    如果有不清楚的地方,请评论。

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 2020-02-27
      • 2021-11-25
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多