【问题标题】:How do I issue HGET/GET command for Redis Database via Node.js?如何通过 Node.js 为 Redis 数据库发出 HGET/GET 命令?
【发布时间】:2012-05-22 00:09:28
【问题描述】:

我正在使用 Node.js 和 Redis 数据库。我是 Redis 新手。

我正在为节点使用https://github.com/mranney/node_redis 驱动程序。

初始化代码 -

var redis = require("redis"),
client = redis.createClient();

我尝试设置一些键值对 -

client.hset("users:123" ,"name", "Jack");

我想知道我可以通过 Node 从 Redis 获取 name 参数。

我试过了

var name = client.hget("users:123", "name");  //returns 'true'

但它只返回“true”作为输出。我想要价值(即 - 杰克) 我需要使用什么语句?

【问题讨论】:

    标签: database node.js redis


    【解决方案1】:

    你应该这样做:

    client.hset("users:123", "name", "Jack");
    // returns the complete hash
    client.hgetall("users:123", function (err, obj) {
       console.dir(obj);
    });
    
    // OR
    
    // just returns the name of the hash
    client.hget("users:123", "name", function (err, obj) {
       console.dir(obj);
    });
    

    还要确保您了解 JavaScript 中回调和闭包的概念以及 node.js 的异步特性。如您所见,您将一个函数(回调或闭包)传递给hget。一旦 redis 客户端从服务器检索到结果,就会调用此函数。如果发生错误,第一个参数将是一个错误对象,否则第一个参数将为空。第二个参数将保存结果。

    【讨论】:

    • 错字是什么?我添加了一个我错过的分号。
    • 好的。现在我明白了为什么 GET,HGET 需要回调。谢谢!
    • 您忘记了 hset 命令中“Jack”周围的引号。其次,在 user:123 之后,您忘记了 hget 命令中的引号
    • 哈哈。好的。谢谢 。知道了 :) 。已更新。
    【解决方案2】:

    我找到了答案——

    获取值需要回调函数。

    client.hget("users:123", "name", function (err, reply) {
    
        console.log(reply.toString());
    
        });
    

    【讨论】:

    • 谁能告诉我为什么我们需要做这种回调?
    • 这是 JavaScript 兄弟 ;)
    • 需要回调,因为从数据库中获取结果需要一些时间。 Javascript 是单线程的——它可以让控件脱离函数并在结果可用时返回。这样它就不会阻塞整个线程。因此回调。
    猜你喜欢
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2011-01-14
    • 2020-10-29
    • 2011-01-04
    • 2012-02-21
    相关资源
    最近更新 更多