Redis:如何检查while循环中是否存在

我在我的应用程序中使用Redis,有一件事情对我来说并不明确。 我用一个随机生成的string作为关键字保存一个对象。 不过,我想检查一下这个密钥是否存在。 我打算使用while循环,但是我不知道如何根据Redis来构造它。 因为如果我想检查一次,我会做;

redisClient.get("xPQ", function(err,result){ if(result==null) exists = false }); 

但是我想用while循环作为;

 while(exists == false) 

但是我不能在我的脑海中build立代码结构。 会在function内部还是在function外?

一般来说,你不应该检查客户端的密钥是否存在。 它导致竞争条件。 例如,另一个线程可以在第一个线程检查其存在之后插入密钥。

您应该使用以NX结尾的命令。 例如 – SETNX和HSETNX 。 这些将只在不存在的情况下插入密钥。 它保证是primefaces的。

我不明白为什么你需要执行主动轮询来检查是否存在一个密钥(有更好的方法来处理这种情况),但我会尽量回答这个问题。

根本不应该使用while循环(在函数内部或外部)。 由于node.js的asynchronous性质,使用尾recursion可以更好地实现这些循环。 这里是一个例子:

 var redis = require('redis') var rc = redis.createClient(6379, 'localhost'); function wait_for_key( key, callback ) { rc.get( key, function(err,result) { if ( result == null ) { console.log( "waiting ..." ) setTimeout( function() { wait_for_key(key,callback); }, 100 ); } else { callback(key,result); } }); } wait_for_key( "xPQ", function(key,value) { console.log( key+" exists and its value is: "+value ) }); 

有多种方法可以使用专用库(使用延续传递样式或光纤)来简化这些expression式。 例如,你可能想要检查async.js包的while和until函数。

https://github.com/caolan/async