原文标题:Node.js and Redis tutorial – Installation and commands
作者:Shahid (UnixRoot) Shaikh
翻译:治电小白菜
原文地址:https://codeforgeek.com/2016/06/node-js-redis-tutorial-installation-commands/
译者注:发现这篇文章很棒,所以就翻译了,能力有限,有错误可以指出。
我的学习代码:https://github.com/klren0312/node_redis_study
Redis是一个高性能的内存数据库,用作数据结构存储。Redis支持hash,string,lists和其他复杂的数据结构,并且能保持很高的性能。
Nodejs中,Redis可以被用来解决各种各样的问题,比如缓存服务器或者信息代理。在这个入门里,我们将介绍nodejs中受欢迎以及有用的Redis命令。
在我们开始前,让我们来看看Redis在不同平台上的安装。
安装Redis
在MAC和Linux上安装Redis,你可以手动安装,像这里介绍的一样,或者你可以很懒像我一样,试用这些命令来安装它
Ubuntu
sudo apt-get install redis-server
Mac 上使用 brew
brew install redis
Window没有Redis团队的官方安装包,但是这儿有一些你可以用在你机子上的可用端口(译者注:https://github.com/MicrosoftArchive/redis)
在安装之后,你可以使用下面的命令来启动Redis服务
redis-server
你应该会看到下面的画面
要进入Redis命令行,要单独在另一个命令行框中(上面的命令行框不要关),输入下面的命令
redis-cli
你应该能看到下面的画面
尝试去运行“PING”命令,你应该可以接收到“PONG"命令
配置Nodejs和Redis
NodeRedis是非常流行和高性能的Node.js Redis客户端。它几乎以很高性能地支持Redis的每一个语法。
用下面命令,来使你的项目支持NodeRedis
npm i --S redis
要在Node.js中使用它,你需要创建一个Redis客户端。这里是一个代码片段。
var redis = require('redis');
var redisClient = redis.createClient({host : 'localhost', port : 6379});
redisClient.on('ready',function() {
console.log("Redis is ready");
});
redisClient.on('error',function() {
console.log("Error in Redis");
});
将上面的代码保存到名为app.js的文件中,以及使用下面的命令来运行它
node app.js
如果Redis是开启的以及在运行,你应该可以看到下面的画面
如果你想要加入更多有关Redis连接的配置参数,这儿由一个支持的列表
Redis的身份验证
这只有当你的Redis服务需要通过认证被保护的时候需要。你必须在连接上Redis使用下面的语法来验证身份:
redisClient.auth('password', function(err,reply){
console.log(reply);
});
保存键值对数据到Redis
我们建立了Node.js和Redis连接,以及相互通信,让我们来保存一些数据进去。就像我们在文章开头提到的,Redis通过键值对来对数据进行存储。让我们来看下他们吧:
存储字符串
可以使用下面的命令来保存一个简单的字符传
redisClient.set("language","nodejs")
在这里"language"是键,"nodejs"是值。在这个命令运行之后,你可以通过下面的命令,在Redis中查看
GET language
回调是可以配置的,如果你想要收到命令的结果,你可以像下面一样,提供一个回调
redisClient.set("language","nodejs",function(err,reply){
cnosole.log(err);
console.log(reply);
})
在检索键值时,你也可以运行Redis GET命令,带上回调或者不带
redisClient.get("language",function(err,reply){
console.log(err);
console.log(reply);
})
存储对象(Hash)
如果你想要存储像下面这些的数据
{
"webserver" : "expressjs",
"database" : "mongoDB",
"devops" : "jenkins"
}
Redis支持存储他们在一个快照(键)中,而不是存储位字符串对。我们可以使用hmset()命令来将这样的hash存入Redis中。
redisClient.hmset("tools","webserver","expressjs","database","mongoDB","devops","jenkins",function(er$
console.log(err);
console.log(reply);
});
redisClient.hgetall("tools",function(err,reply) {
console.log(err);
console.log(reply);
});
存储List和Set
你也可以存储像List和Set一样复杂的数据结构。在Set和List中唯一不同的时,List可以存储重复的字段而Set不能。
下面是相关代码。第一个参数是Set和List的名称
redisClient.rpush(["languages","angularjs","nodejs","go"],function(err,reply) {
console.log(err);
console.log(reply);
});
redisClient.sadd(["devopstools","jenkins","codeship","jenkins"],function(err,reply) {
console.log(err);
console.log(reply);
});
下面是输出结果
null
3//List数据个数
null
2//set数据个数
可以看到Set中,存入的数据个数是3,但是我们实际看到的是2,因为由2个Jenkins的值是重复的,被过滤了。
操作键值对
在存储了键值后,Redis还允许你处理它们,比如删除键,查询是否存在以及设置失效时间。
查看键是否存在
你可以使用exist()函数来检测键是否存在。
redisClient.exists('language',function(err,reply) {
if(!err) {
if(reply === 1) {
console.log("Key exists");
} else {
console.log("Does't exists");
}
}
});
删除键
你可以使用del()函数来从Redis中删除键
redisClient.del('redisClient',function(err,reply) {
if(!err) {
if(reply === 1) {
console.log("Key is deleted");
} else {
console.log("Does't exists");
}
}
});
设置键的失效时间
你也可以设置键的失效时间。一旦失效时间到了,Redis将自动删除那个键,你将它用到Session的存储上是非常有效的。
你可以使用expire()函数来做这件事:
redisClient.expire('redisClient', 30); // 失效时间为30秒.
监控Redis
Redis提供其操作发生的实时反馈。可以使用下面的命令,来使用和追踪它
redis-cli monitor
总结
我们介绍了Redis的基础以及安装和使用很多命令。这儿有更多的Redis特性,比如聚类等,也有很多的命令你可以去学习。