存储键值对
现在你已了解如何从 Node.js 连接 Redis,让我们看看如何在 Redis 存储中存储键值对。
存储字符串
所有 Redis 命令都在客户端对象上公开为不同的函数。要存储简单字符串,请使用以下语法:
client.set('framework', 'AngularJS');
要么
client.set(['framework', 'AngularJS']);
上面的代码片段将一个简单的字符串 AngularJS 存储在关键框架中。你应该注意两个片段都做同样的事情。唯一的区别是第一个传递可变数量的参数,而后者传递一个 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 中的密钥。可以通过回调参数回复访问密钥的值。如果密钥不存在,则回复的值将为空。
存储哈希
很多时候存储简单的值并不能解决你的问题。你需要在 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 的列表,并向其推送了两个元素。所以,列表的长度现在是两个。如你所见,我已经将 args
数组传递给了 rpush
。数组的第一项表示键的名称,而其余项表示列表的元素。你也可以使用 lpush()
而不是 rpush()
将元素推向左侧。
要检索列表的元素,你可以使用 lrange()
函数,如下所示:
client.lrange('frameworks', 0, -1, function(err, reply) {
console.log(reply); // ['angularjs', 'backbone']
});
请注意,通过将 -1 作为第三个参数传递给 lrange()
,可以获得列表的所有元素。如果你想要列表的子集,则应在此处传递结束索引。
存储集
集合类似于列表,但不同之处在于它们不允许重复。因此,如果你不希望列表中包含任何重复元素,则可以使用集合。以下是我们如何修改以前的代码段以使用集合而不是列表。
client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
console.log(reply); // 3
});
如你所见,sadd()
函数使用指定的元素创建一个新集合。这里,集合的长度是三。要检索集合的成员,请使用 smembers()
函数,如下所示:
client.smembers('tags', function(err, reply) {
console.log(reply);
});
此代码段将检索该集的所有成员。请注意,检索成员时不会保留订单。
这是每个 Redis 支持的应用程序中最重要的数据结构列表。除了字符串,列表,集合和散列之外,你还可以在 Redis 中存储有序集,hyperLogLog 等。如果需要完整的命令和数据结构列表,请访问 Redis 官方文档。请记住,几乎每个 Redis 命令都暴露在 node_redis 模块提供的客户端对象上。