简体   繁体   English

如何使用 Nodejs + Redis 获取给定 redis 密钥的 redis 值

[英]How to get redis value for a given redis key using Nodejs + Redis

I am using Nodejs + redis to Set and Get key:value pairs.我正在使用 Nodejs + redis 来设置和获取键:值对。 I have written a sample code to set a key:value pair and then fetch it using the default readme from npm redis plugin.我编写了一个示例代码来设置键:值对,然后使用 npm redis 插件的默认自述文件获取它。

My goal here is to get value from the redis server using any given key.我的目标是使用任何给定的密钥从 redis 服务器获取价值。 I have followed the steps as given by npm redis plugin.我已按照 npm redis 插件给出的步骤进行操作。 I am able to log it, but since the plugin is async cant figure out a way to get a synchronous client.get request.我可以记录它,但由于插件是异步的,所以无法找到获取同步client.get请求的方法。

My code is我的代码是

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

bluebird.promisifyAll(redis.RedisClient.prototype);
bluebird.promisifyAll(redis.Multi.prototype);

const redisKey = "redis-set-key";
const redisValue = "hello-world";

client.set(redisKey, redisValue);

function getData(key) {
    return client.get(key, function(err, result) {
        console.log("1. Get key from redis - ", result.toString());
        return result.toString();
    });
}

const getRedisdata = getData(redisKey);
console.log("2. getRedisdata", getRedisdata);

Result结果

2. getRedisdata false
1. Get key from redis -  hello-world

My goal is to get the result like this我的目标是得到这样的结果

1. Get key from redis -  hello-world
2. getRedisdata hello-world

Please help me resolve this.请帮我解决这个问题。

Found a solution, here is my resolved code找到了解决方案,这是我解决的代码

const redis = require("redis");
const client = redis.createClient();
const bluebird = require("bluebird");

bluebird.promisifyAll(redis.RedisClient.prototype);
bluebird.promisifyAll(redis.Multi.prototype);

const redisKey = "redis-set-key";
const redisValue = "hello-world";
client.set(redisKey, redisValue);

async function setKey(key, value, expire = "EX", time = 300) {
    return new Promise((resolve, reject) => {
        return client.set(key, value, function(err, result) {
            if (result === null) {
                reject("set key fail promise");
            } else {
                resolve(result);
            }
        });
    });
}

async function getKey(key) {
    return new Promise((resolve, reject) => {
        return client.getAsync(key).then(function(res) {
            if (res == null) {
                reject("fail promise");
            } else {
                resolve(res);
            }
        });
    });
}

async function hashGetKey(hashKey, hashvalue) {
    return new Promise((resolve, reject) => {
        return client.hget(hashKey, hashvalue, function(err, res) {
            if (res == null) {
                reject("hash key fail promise");
            } else {
                resolve(res.toString());
            }
        });
    });
}

async function hashGetAllKey(hashKey) {
    return new Promise((resolve, reject) => {
        return client.hgetall(hashKey, function(err, res) {
            if (res == null) {
                reject("hash key all fail promise");
            } else {
                resolve(res);
            }
        });
    });
}

async function delKey(key) {
    return new Promise((resolve, reject) => {
        return client.del(key, function(err, result) {
            if (result === null) {
                reject("delete fail promise");
            } else {
                resolve(result);
            }
        });
    });
}

(async () => {
    // get single key value
    try {
        const keyData = await getKey("string key");
        console.log("Single key data:-", keyData);
    } catch (error) {
        console.log("Single key data error:-", error);
    }

    // get single hash key value
    try {
        const hashKeyData = await hashGetKey("hashkey", "hashtest 1");
        console.log("Single hash key data:-", hashKeyData);
    } catch (error) {
        console.log("Single hash key data error:-", error);
    }

    // get all hash key values
    try {
        const allHashKeyData = await hashGetAllKey("hashkey");
        console.log("All hash key data:-", allHashKeyData);
    } catch (error) {
        console.log("All hash key data error:-", error);
    }

    // delte single key
    try {
        const checkDel = await delKey("XXYYZZ!!!!");
        console.log("Check key delete:-", checkDel);
    } catch (error) {
        console.log("Check key delete error:-", error);
    }

    // set single key
    try {
        const checkSet = await setKey("XXYYZZ", "AABBCC");
        console.log("Check data setkey", checkSet);
    } catch (error) {
        console.log("Check data setkey error", error);
    }
})();

//  hget hashkey "hashtest 1"
client.hset("hashkey", "hashtest 1", "some value", redis.print);
client.hset(["hashkey", "hashtest 2", "some other value"], redis.print);

Haven't you read the Redis module's readme, it provides another way to use async/await way to make the async redis get process as sync.你有没有读过Redis模块的自述文件,它提供了另一种使用异步/等待方式使异步 redis 获取进程同步的方法。

const { promisify } = require("util");
const getAsync = promisify(client.get).bind(client);
 
getAsync.then(console.log).catch(console.error);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM