存储键值对

现在你已了解如何从 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 模块提供的客户端对象上。