使用redis和node.js问题:为什么redis.get返回false?

时间:2011-07-16 09:17:48

标签: node.js redis

我正在运行一个由node.js支持的简单Web应用程序,我正在尝试使用redis来存储一些键值对。我所做的只是在命令行上运行“node index.js”,这是我的index.js的前几行:

var app = require('express').createServer();
var io = require('socket.io').listen(app);

var redis = require('redis');
var redis_client = redis.createClient();
redis_client.set("hello", "world");
console.log(redis_client.get("hello"));

但是,我redis_client.get("hello")而不是"world"的所有内容都是false。为什么不返回"world"

(我正在运行redis-server)

奇怪的是,发布的here示例代码运行正常,并产生预期的输出。对于简单的setget

,我有什么不正确的做法吗?

4 个答案:

答案 0 :(得分:11)

我敢打赌get是异步的,所以你可以通过回调获得价值。

编辑:
它实际上是异步的:file.js

答案 1 :(得分:3)

你走了!对于ES6

redis_client.get("hello", (err, data)=>{
  if(err){
    throw err;
  }
  console.log(data);
});

适用于ES5

redis_client.get("hello", function(err, data){
  if(err){
    throw err;
  }
  console.log(data);
});

答案 2 :(得分:0)

这可能有助于讨厌使用回调的人:

只需执行以下操作即可使它散布,而不必使用外部库:

const pick = (fruit, {[fruit]: out, ...fruits}) => [out, fruits];

const [fruit, fruits] = pick('banana', basket);

console.log(fruit);
console.log(fruits);
console.log(basket);

答案 3 :(得分:0)

遇到同样的问题,使用promisify解决了。

const redis = require('redis');
const util = require('util');
const redisUrl ="redis://127.0.0.1:6379";
const client = redis.createClient(redisUrl);

client.set = util.promisify(client.set)

client.get = util.promisify(client.get);


const setRed =async ()=>{
    await client.set('name','Jo');
    let name = await client.get('name');
//prints the value for name
    console.log(name);
}

setRed();