在 Node.js 應用程式中,使用 Redis 伺服器最受歡迎的庫之一是 node-redis,它可以在 https://github.com/NodeRedis/node-redis 找到。

在您的專案中安裝該庫:

npm install redis

提示:如果專案是全新的並且還沒有 package.json 檔案,請先執行 npm init -y

連接到 Redis 實例

安裝完庫之後,使用以下程式碼在您的專案中引入它:

const redis = require('redis')

或者

import redis from 'redis'

獲取 redis 物件之後,使用以下程式碼創建一個新的客戶端:

const client = redis.createClient({
 url: 'redis://YOUR REDIS INSTANCE URL'
})

然後使用以下程式碼連接到 Redis(在 async 函數中執行):

await client.connect()

當您獲得了客戶端之後,就可以執行 Redis 可以做的所有操作。

要關閉連接,請調用:

client.quit()

存儲和檢索鍵值

使用 set() 將鍵值對存儲到 Redis 中:

client.set("<key>", "<value>")

例如:

client.set("name", "Flavio")
client.set("age", 37)

如果在乾淨的 Redis 伺服器上運行 redis-cli 中的 KEYS * 命令,您將看到這兩個鍵:

使用 get() 可以獲取存儲在鍵中的值:

const value = await client.get("name")

使用以下程式碼刪除鍵值對:

client.del("names")

工作與列表

在 Redis 中,我們可以使用以下 Redis 模塊中的命令來處理列表:

  • LPUSH
  • RPUSH
  • LTRIM
  • LRANGE

這些命令直接映射為 client 物件的方法。

使用以下程式碼創建一個列表:

client.lPush('names', 'Flavio')

將新項目添加到列表的底部:

client.rPush('names', 'Roger')

或者添加到列表的頂部:

client.lPush('names', 'Syd')

使用以下程式碼列出列表中的所有項目:

const result = await client.lRange('names', 0, -1)
// result is [ 'Roger', 'Flavio', 'Syd' ]

使用以下程式碼從列表中刪除項目:

client.rPop('names')

使用以下程式碼刪除列表:

client.del('names')

工作與集合

在 Redis 中,我們使用以下 Redis 模塊中的命令來處理集合:

  • SADD
  • SPOP
  • SMEMBERS

這些命令直接映射為 client 物件的方法。

使用以下程式碼創建一個集合:

client.sAdd('names', 'Flavio')

添加更多項目到該集合:

client.sAdd('names', 'Roger')

您可以一次添加多個項目:

client.sAdd('names', 'Roger', 'Syd')

也可以通過傳遞一個陣列:

const names = ['Flavio', 'Roger', 'Syd']
client.sAdd('names', names)

使用以下程式碼列出集合中的所有項目:

const names = await client.sMembers('names')

使用以下程式碼從集合中刪除一個隨機項目:

client.sPop('names')

可以添加第二個參數以刪除多個隨機項目:

client.sPop('names', 3)

使用以下程式碼刪除集合:

client.del('names')

工作與哈希表

在 Redis 中,我們使用以下命令來處理哈希表:

  • HMSET
  • HGETALL
  • HSET
  • HINCRBY

這些命令直接映射為 client 物件的方法。

使用以下程式碼創建一個哈希表:

client.hSet('person:1', 'name', 'Flavio', 'age', 37)

要獲取用戶的所有屬性,請使用 HGETALL:

const items = client.hGetAll('person:1')

您可以使用 HSET 更新哈希表的屬性:

client.hSet('person:1', 'age', 38)

您可以使用 HINCRBY 遞增存儲在哈希表中的值:

client.hIncrBy('person:1', 'age', 1)

使用以下程式碼刪除哈希表:

client.del('person:1')

訂閱

訂閱是 Redis 的一個令人驚奇的功能,在 Node.js 中可以實現一些非常奇特的事情。

一個發布者在一個頻道上發送一個消息,多個訂閱者接收它。

使用以下程式碼訂閱一個頻道:

await subscriber.subscribe('dogs', (message) => {
 console.log(message);
})

使用 client.publish('<channel>', '<message>') 發佈一個消息:

client.publish('dogs', 'Roger')

請注意,您不能在同一個 client 實例上發佈和訂閱。

在同一個應用程式中這樣做,請創建 2 個客戶端:

const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })

await subscriber.subscribe('dogs', (message) => {
 console.log(channel, message);
})

publisher.publish('dogs', 'Roger')