點燈坊

失くすものさえない今が強くなるチャンスよ

如何在 Node 使用 Redis 的 MSET 與 MGET ?

Sam Xiao's Avatar 2020-03-19

Redis 的 MSETMGET 可同時設定多筆 Key / Value Pair,亦可使用 Node Redis 的 mset()mget()

Version

macOS Catalina 10.15.3
WebStorm 2019.3.4
Redis 5.0.6
Node Redis 2.8.0

Command

$ mset title "FP in JavaScript" price 100
$ mget title price
  • 使用 MSET 一次設定 titleprice 兩個 key
  • 使用 MGET 一次讀取 titleprice

mset001

Node

import { createClient } from 'redis'
import { promisify } from 'util'

let myRedis = createClient({
  host: 'localhost',
  port: 6379
})

let redisMset = promisify(myRedis.mset).bind(myRedis)
let redisMget = promisify(myRedis.mget).bind(myRedis)

redisMset('title', 'FP in JavaScript', 'price', 100).then(console.log)
redisMget('title', 'price').then(console.log)

第 9 行

let redisMset = promisify(myRedis.mset).bind(myRedis)
let redisMget = promisify(myRedis.mget).bind(myRedis)

使用 promisify()mset()mget() 從 callback 轉成回傳 promise。

12 行

redisMset('title', 'FP in JavaScript', 'price', 100).then(console.log)

使用 redisMSet() 寫入 titleprice 兩個 key,若成功將回傳 OK promise。

13 行

redisMget('title', 'price').then(console.log)

使用 redisMget() 讀出 titleprice 兩個 key,回傳為 array promise。

mset000

Conclusion

  • Node Redis 所提供的 mset()mget() 為 callback based,可使用 promisify() 轉成 promise based
  • 由於 mget() 可一次取出多個 key,因此回傳為 array promise

Reference

Redis, MSET
Redis, MGET