在Node.js应用中使用Redis的方法简介
在开始本文之前请确保安装好Redis和Node.js以及Node.js的Redis扩展——node_redis
首先创建一个新文件夹并新建文本文件app.js文件内容如下:
varredis=require("redis")
,client=redis.createClient();
client.on("error",function(err){
console.log("Error"+err);
});
client.on("connect",runSample);
functionrunSample(){
//Setavalue
client.set("stringkey","HelloWorld",function(err,reply){
console.log(reply.toString());
});
//Getavalue
client.get("stringkey",function(err,reply){
console.log(reply.toString());
});
}
当连接到Redis后会调用runSample函数并设置一个值,紧接着便读出该值,运行的结果如下:
OK HelloWorld
我们也可以使用EXPIRE命令来设置对象的失效时间,代码如下:
varredis=require('redis')
,client=redis.createClient();
client.on('error',function(err){
console.log('Error'+err);
});
client.on('connect',runSample);
functionrunSample(){
//Setavaluewithanexpiration
client.set('stringkey','HelloWorld',redis.print);
//Expirein3seconds
client.expire('stringkey',3);
//ThistimerisonlytodemotheTTL
//Runseveryseconduntilthetimeout
//occursonthevalue
varmyTimer=setInterval(function(){
client.get('stringkey',function(err,reply){
if(reply){
console.log('Ilive:'+reply.toString());
}else{
clearTimeout(myTimer);
console.log('Iexpired');
client.quit();
}
});
},1000);
}
注意:上述使用的定时器只是为了演示EXPIRE命令,你必须在Node.js项目中谨慎使用定时器。
运行上述程序的输出结果是:
Reply:OK Ilive:HelloWorld Ilive:HelloWorld Ilive:HelloWorld Iexpired
接下来我们检查一个值在失效之前存留了多长时间:
varredis=require('redis')
,client=redis.createClient();
client.on('error',function(err){
console.log('Error'+err);
});
client.on('connect',runSample);
functionrunSample(){
//Setavalue
client.set('stringkey','HelloWorld',redis.print);
//Expirein3seconds
client.expire('stringkey',3);
//ThistimerisonlytodemotheTTL
//Runseveryseconduntilthetimeout
//occursonthevalue
varmyTimer=setInterval(function(){
client.get('stringkey',function(err,reply){
if(reply){
console.log('Ilive:'+reply.toString());
client.ttl('stringkey',writeTTL);
}else{
clearTimeout(myTimer);
console.log('Iexpired');
client.quit();
}
});
},1000);
}
functionwriteTTL(err,data){
console.log('Iliveforthislongyet:'+data);
}
运行结果:
Reply:OK Ilive:HelloWorld Iliveforthislongyet:2 Ilive:HelloWorld Iliveforthislongyet:1 Ilive:HelloWorld Iliveforthislongyet:0 Iexpired