node.js redis
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.1
和6379
作为主机名和端口。 如果您有其他主机/端口,则可以按以下方式提供它们:
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'
});
储存清单
如果要存储项目列表,则可以使用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消息系统等。 要了解有关图书馆的更多信息,请查阅其文档 。