发布日期 » 2019年4月15日 星期一

版权声明 » 帅华君原创文章,未经允许不得转载。

Redis遇见Nodejs[译]

图片源自网络

MySQL与Redis

mysql是关系型数据库,Redis是非关系型数据库(NoSQL)主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限

类型上:mysql是关系型数据库,redis是缓存数据库
作用上:mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢
需求上:mysql和redis因为需求的不同,一般都是配合使用。

何为Redis

Redis是内存型数据结构存储,可以当作数据库、缓存和暂存信息(message broker)使用。Redis支持不同类型的数据结构:字符串(strings)、列表(lists)、集合(sets)、哈希(hash)、位图等。因为Redis是将数据存储在内存中,因此数据存/取速度极快。但是内存中的数据会因为机器的重启而被擦除,除非启用持久化Redis,好消息是,Redis默认启用持久化存储机制(你可以根据需要禁用或配置持久化存储)。

安装Redis(Linux)

参考连接:https://redis.io/download

下载Redis,使用如下命令解压并编译Redis:

$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
$ tar xzf redis-4.0.9.tar.gz
$ cd redis-4.0.9
$ make

二进制重新编译成功,并可在src目录中使用,运行Redis:

$ src/redis-server

使用内建client与Redis交互

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

OK,现在我们已经在本地机器上成功的安装Redis,

在NodeJS应用中使用Redis

首先,使用npm为NodeJS安装Redis Client。

$ npm install redis

接下来,创建一个名为redisDemo.js文件。

// redisDemo.js
var redis = require('redis')
var client = redis.createClient(); // 创建新的client

默认情况下 redis.createClient() 将使用127.0.0.1和端口6379,你可以自定义IP和端口号。

var client = redis.createClient(port, host);

接下来,通过监听连接事件判断是否成功连接到redis-server。可以这样检查是否连接成功。

client.on('connect', function(){
  console.log('Redis client connected');
})

同样,若redis-server连接失败回调:

client.on('error', function(err){
  console.log('Something went wrong ' + err);
})

如果在NodeJS应用启动前没有运行redis-server,就回触发上方的回调函数。因此,请确保在执行上方测试代码之前使redis运行起来。

使用下方命令可以启动、停止redis服务:

/etc/init.d/redis-server stop
/etc/init.d/redis-server start

现在的代码看起来是这样的:

var redis = require('redis');
var client = redis.createClient();

client.on('connect', function() {
  console.log('Redis client connected');
});

client.on('error', function (err) {
  console.log('Something went wrong ' + err);
});

接下来,使用redis设置一些简单的键/值对,使用set()get() 方法即可:

client.set('my test key', 'my test value', redis.print);
client.get('my test key', function (error, result) {
  if (error) {
    console.log(error);
    throw error;
  }
  console.log('GET result ->' + result);
});

首先使用 set() 设置 key 和 value ,并打印是否成功设置的结果。

Redis是基于一个键对应一个值的存储方式,Redis将创建一个名为 ‘my test key’ 的名称,并为其赋值 ‘my test value’。

完整的Demo代码:

var redis = require('redis');
var client = redis.createClient();

client.on('connect', function() {
  console.log('Redis client connected');
});

client.on('error', function (err) {
  console.log('Something went wrong ' + err);
});

client.set('my test key', 'my test value', redis.print);
client.get('my test key', function (error, result) {
  if (error) {
    console.log(error);
    throw error;
  }
  console.log('GET result ->' + result);
});

输出如下:

Redis client connected
Reply: OK
GET result ->my test value

总结:
1、Redis是将数据存储在内存中的。
2、极快的存储与读取速度。
3、NodeJS中redis使用手册 https://www.npmjs.com/package/redis
4、Redis官网 https://redis.io/commands

原文链接:https://hackernoon.com/using-redis-with-node-js-8d87a48c5dd7
译文对原文部分位置有修改。