Using redis and node.js issue: why does redis.get return false?

Viewed 8799

I'm running a simple web app backed by node.js, and I'm trying to use redis to store some key-value pairs. All I do is run "node index.js" on the command line, and here's the first few lines of my 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"));

However, all I get for redis_client.get("hello") instead of "world" is false. Why is it not returning "world"?

(And I am running the redis-server)

What's weird too is that the example code posted here runs fine, and produces the expected output. Is there something I'm doing incorrectly for simple set and get?

5 Answers

This might help someone who hates using callbacks:

Just promisify it without having to use external library by doing something like:

new Promise((resolve, reject) => {
  redis_client.get("hello", (e, data) => {
    if(e){
      reject(e);
    }
    resolve(data);
  });
});

Nowadays, Redis uses a promises API.

const redis = require("redis"); // 4.0.1
const redisClient = redis.createClient();

(async () => {
  await redisClient.connect();
  await redisClient.set("hello", "world");
  console.log(await redisClient.get("hello")); // => world
  await redisClient.quit();
})();

Had the same issue, solved it by using 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();

Related