點燈坊

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

如何在 Node 使用 Redis 的 RPUSH ?

Sam Xiao's Avatar 2020-03-21

Redis 的 RPUSH 可直接針對 List 新增 Element,亦可使用 Node Redis 的 rpush()

Version

macOS Catalina 10.15.3
WebStorm 2019.3.4
Redis 5.0.6
Node Redis 2.8.0

Command

$ rpush mylist 'hello'
$ rpush mylist 'world'
$ lrange mylist 0 -1
  • 使用 rpushmylist key 新增 element
  • 使用 lrange 顯示 mylist0 為開始 index,-1 為結束 index

rpush000

Node

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

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

let redisRpush = promisify(myRedis.rpush).bind(myRedis)
let redisLrange = promisify(myRedis.lrange).bind(myRedis)

redisRpush('mylist', 'hello')
redisRpush('mylist', 'world')
redisLrange('mylist', 0, -1).then(console.log)

第 9 行

let redisRpush = promisify(myRedis.rpush).bind(myRedis)
let redisLrange = promisify(myRedis.lrange).bind(myRedis)

使用 promisify()rpush()orange() 從 callback 轉成回傳 promise。

12 行

redisRpush('mylist', 'hello')

使用 redisRpush()mylist key 新增 hello

14 行

redisLrange('mylist', 0, -1).then(console.log)

使用 redisLrange() 顯示 mylist 所有資料,回傳為 array promise。

rpush001

Conclusion

  • Node Redis 所提供的 rpush()lrange() 為 callback based,可使用 promisify() 轉成 promise based
  • 由於 lrange() 回傳多筆資料,因此為 array promise

Reference

Redis, RPUSH
Redis, LRANGE