我有一个正在开发的带有 Redis 的 Node.js 小项目。我目前看到的是client.exists(anything)返回 true,即使该键在 Redis 存储中不存在。这是一些代码来演示我在做什么。
const key = 'k'
const content = 'blah blah'
client.rpush(key, content)
Run Code Online (Sandbox Code Playgroud)
我运行上面的代码然后停下来。现在,在命令行上,我执行以下操作:
> redis-cli
:6379> exists k
true
:6379> exists foo
false
Run Code Online (Sandbox Code Playgroud)
惊人的!正如预期的那样。现在,我在 Node.js 中运行以下代码:
const key = 'k'
if(client.exists(key)) console.log('should print')
if(client.exists('foo')) console.log('should not print')
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在控制台输出中得到的结果是:
should print
should not print
Run Code Online (Sandbox Code Playgroud)
为什么 Node.js 中的 Redis 在 CLI 上的 Redis 按预期报告该东西不存在时报告该东西存在?
因为您使用的库是错误的,因为它是异步的。
如果您阅读 docs,您会发现您需要传入结果回调(或承诺库以使用承诺)。
client.exists(key, (err, ok) => {
if (err) throw err;
console.log(ok);
});
Run Code Online (Sandbox Code Playgroud)