我有以下连接到 Redis 服务器的
RedisClient
类:
import { promisify } from 'util';
import { createClient } from 'redis';
class RedisClient {
constructor() {
this.client = null;
}
async initialize() {
this.client = RedisClient.getRedisClient();
await this.waitForReady();
}
static getRedisClient() {
return createClient();
}
async waitForReady() {
return new Promise((resolve, reject) => {
this.client.on('error', (err) => console.log(`Redis: ${err}`, reject));
this.client.on('ready', () => console.log('Redis connected'), resolve);
});
}
isAlive() {
return this.client.isReady;
}
}
const redisClient = new RedisClient();
(async () => {
await redisClient.initialize();
})();
export default redisClient;
我希望 Redis 客户端在使用之前准备好,这就是为什么我创建了
waitForReady
函数来等待 Redis 客户端的创建。我用这段代码测试了它:
import redisClient from './utils/redis';
(async () => {
console.log(redisClient.isAlive());
})();
但是我在控制台日志中收到未定义的输出。为什么会发生我尝试使 redis 客户端的创建异步,但仍然未定义。是因为 isReady 已被弃用还是我应该使用 isOpen 来代替?
看起来您正在使用 Node Redis。使用 Node Redis 时,创建后必须连接到客户端。
像这样:
await this.client.connect()
在 README 中有更新的语法,我还没有尝试过,但看起来很漂亮:
import { createClient } from 'redis';
const client = await createClient()
.on('error', err => console.log('Redis Client Error', err))
.connect();
await client.set('key', 'value');
const value = await client.get('key');
await client.disconnect();