點燈坊

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

如何在 Node 使用 Redis 的 HMSET 與 HMGET ?

Sam Xiao's Avatar 2020-03-21

Redis 的 HMSETHMGET 可同時設定多筆 Field 在單一 Key 內,亦可使用 Node Redis 的 hmset()hmget()

Version

macOS Catalina 10.15.3
WebStorm 2019.3.4
Redis 5.0.6
Node Redis 2.8.0

Command

$ hmset book title 'FP in JavaScript' price 100
$ hmget book title price
  • 使用 HMSET 一次設定 book key 下的 titleprice 兩個 field
  • 使用 HMGET 一次讀取 book key 下的 titleprice 兩個 field

hmset000

Node

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

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

let redisHmset = promisify(myRedis.hmset).bind(myRedis)
let redisHmget = promisify(myRedis.hmget).bind(myRedis)

redisHmset('book', 'title', 'FP in JavaScript', 'price', 100).then(console.log)
redisHmget('book', 'title', 'price').then(console.log)

第 9 行

let redisHmset = promisify(myRedis.hmset).bind(myRedis)
let redisHmget = promisify(myRedis.hmget).bind(myRedis)

使用 promisify()hmset()hmget() 從 callback 轉成回傳 promise。

12 行

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

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

13 行

redisHmget('book', 'title', 'price').then(console.log)

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

hmset001

Conclusion

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

Reference

Redis, HMSET
Redis, HMGET