gpt4 book ai didi

node.js - 如何使用 Nodejs + Redis 获取给定 redis 键的 redis 值

转载 作者:行者123 更新时间:2023-12-05 06:23:16 25 4
gpt4 key购买 nike

我正在使用 Nodejs + redis 来设置和获取键值对。我编写了一个示例代码来设置键值对,然后使用 npm redis 插件的默认自述文件获取它。

我的目标是使用任何给定的键从 Redis 服务器获取值。我已经按照 npm redis 插件给出的步骤进行操作。我能够记录它,但由于插件是异步的,所以无法找到一种方法来获取同步 client.get 请求。

我的代码是

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

结果

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

我的目标是得到这样的结果

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

请帮我解决这个问题。

找到解决方案,这是我解决的代码

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

最佳答案

你没读过Redis模块的自述文件吗,它提供了另一种使用async/await方式让async redis get process as sync的方式。

const { promisify } = require("util");
const getAsync = promisify(client.get).bind(client);

getAsync.then(console.log).catch(console.error);

关于node.js - 如何使用 Nodejs + Redis 获取给定 redis 键的 redis 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com