将Redis与Node.js结合使用

Redis是一种快速高效的内存中键值存储。 它也被称为数据结构服务器,因为键可以包含字符串,列表,集合,哈希和其他数据结构。 如果使用的是Node.js,则可以使用node_redis模块与Redis进行交互。 本教程介绍了使用node_redis库从Node.js应用程序与Redis进行交互的各种方式。

安装node_redis

您可能已经猜到了, node_redis是Node.js的Redis客户端。 您可以使用以下命令通过npm安装它。

npm install redis

入门

一旦安装了node_redis模块,就可以了。 让我们创建一个简单的文件app.js ,并查看如何从Node.js与Redis连接。

app.js

var redis = require('redis');
var client = redis.createClient(); //creates a new client

默认情况下, redis.createClient()将分别使用127.0.0.16379作为主机名和端口。 如果您有其他主机/端口,则可以按以下方式提供它们:

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

现在,一旦建立连接,您就可以执行一些操作。 基本上,您只需要侦听connect事件,如下所示。

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

因此,以下代码段进入了app.js

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

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

现在,在终端中键入node app来运行该应用程序。 在运行此片段之前,请确保您的Redis服务器已启动并正在运行。

存储键值对

现在您已经知道如何从Node.js与Redis进行连接,接下来让我们看看如何在Redis存储中存储键值对。

存储字符串

所有Redis 命令client对象上以不同的功能公开。 要存储一个简单的字符串,请使用以下语法:

client.set('framework', 'AngularJS');

要么

client.set(['framework', 'AngularJS']);

上面的代码片段针对关键framework存储了一个简单的字符串AngularJS 。 您应该注意,两个代码片段都执行相同的操作。 唯一的区别是,第一个参数传递可变数量的参数,而第二个args传递args数组给client.set()函数。 您还可以传递一个可选的回调以在操作完成时获取通知:

client.set('framework', 'AngularJS', function(err, reply) {
  console.log(reply);
});

如果操作由于某种原因失败,则回调的err参数表示错误。 要检索键的值,请执行以下操作:

client.get('framework', function(err, reply) {
    console.log(reply);
});

client.get()允许您检索Redis中存储的密钥。 可以通过回调参数reply来访问键的值。 如果密钥不存在,则reply的值为空。

储存哈希

很多时候,存储简单值并不能解决您的问题。 您将需要在Redis中存储哈希(对象)。 为此,您可以使用hmset()函数,如下所示:

client.hmset('frameworks', 'javascript', 'AngularJS', 'css', 'Bootstrap', 'node', 'Express');

client.hgetall('frameworks', function(err, object) {
    console.log(object);
});

上面的代码片段在Redis中存储了一个哈希,该哈希将每种技术映射到其框架。 hmset()的第一个参数是密钥的名称。 后续参数表示键值对。 同样, hgetall()用于检索键的值。 如果找到键,则回调的第二个参数将包含作为对象的值。

请注意,Redis不支持嵌套对象。 在存储之前,对象中的所有属性值都将被强制转换为字符串。

您还可以使用以下语法在Redis中存储对象:

client.hmset('frameworks', {
    'javascript': 'AngularJS',
    'css': 'Bootstrap',
    'node': 'Express'
});

还可以传递一个可选的回调来知道操作何时完成。

所有函数(命令)都可以用大写/小写等效项调用。 例如,client.hmset()和client.HMSET()相同。

储存清单

如果要存储项目列表,则可以使用Redis列表。 要存储列表,请使用以下语法:

client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
    console.log(reply); //prints 2
});

上面的代码片段创建了一个称为frameworks的列表,并将两个元素推入其中。 因此,列表的长度现在为2。 如您所见,我已将args数组传递给rpush 。 数组的第一项代表键的名称,其余代表列表的元素。 您也可以使用lpush()而不是rpush()将元素向左推。

要检索列表的元素,可以使用lrange()函数,如下所示:

client.lrange('frameworks', 0, -1, function(err, reply) {
    console.log(reply); // ['angularjs', 'backbone']
});

请注意,您可以通过将-1作为第三个参数传递给lrange()来获得列表的所有元素。 如果需要列表的子集,则应在此处传递结束索引。

储存套

集与列表相似,但区别在于它们不允许重复。 因此,如果您不想在列表中有任何重复的元素,则可以使用set 。 这是我们如何修改之前的代码片段以使用集合而不是列表的方法。

client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
    console.log(reply); // 3
});

如您所见, sadd()函数使用指定的元素创建一个新set 。 在此,集合的长度为三。 要检索集合的成员,请使用smembers()函数,如下所示:

client.smembers('tags', function(err, reply) {
    console.log(reply);
});

此代码段将检索集合中的所有成员。 请注意,在检索成员时不会保留顺序。

这是在每个支持Redis的应用程序中找到的最重要的数据结构的列表。 除了字符串,列表,集合和哈希,您还可以在Redis中存储排序的集合,hyperLogLogs等。 如果您需要命令和数据结构的完整列表,请访问官方Redis 文档 。 请记住,几乎每个Redis命令都在由node_redis模块提供的client对象上node_redis

现在让我们看一下node_redis支持的一些更重要的操作。

检查密钥是否存在

有时,您可能需要检查密钥是否已存在,并进行相应的处理。 为此,您可以使用exists()函数,如下所示:

client.exists('key', function(err, reply) {
    if (reply === 1) {
        console.log('exists');
    } else {
        console.log('doesn\'t exist');
    }
});

删除和过期密钥

有时您需要清除一些密钥并重新初始化它们。 要清除键,可以使用del命令,如下所示:

client.del('frameworks', function(err, reply) {
    console.log(reply);
});

您还可以给现有密钥一个到期时间,如下所示:

client.set('key1', 'val1');
client.expire('key1', 30);

上面的代码段为key1分配了30秒的过期时间。

递增和递减

Redis还支持递增和递减键。 要增加键,请使用incr()函数,如下所示:

client.set('key1', 10, function() {
    client.incr('key1', function(err, reply) {
        console.log(reply); // 11
    });
});

incr()函数将键值增加1。如果需要增加不同的数量,则可以使用incrby()函数。 同样,要减少密钥,可以使用诸如decr()decrby()类的函数。

结论

我们已经在node_redis介绍了基本和最常用的操作。 您可以使用此模块来利用Redis的全部功能,并创建真正复杂的Node.js应用程序。 您可以使用此库构建许多有趣的东西,例如强大的缓存层,强大的Pub / Sub消息系统等。 要了解有关图书馆的更多信息,请查阅其文档 。 希望您喜欢阅读本文。 让我们知道您在评论中的想法。

From: https://www.sitepoint.com/using-redis-node-js/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值