儲存鍵值對

現在你已瞭解如何從 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 模組提供的客戶端物件上。