Node Redis 小試

Redis 是一個高性能的 key-value 數據庫,爲了保證效率,數據都是緩存在內存中,在執行頻繁而又複雜的數據庫查詢條件時,可使用 Redis 緩存一份查詢結果,以提高應用性能。git

 

背景

若是一個 Node 應用有多臺服務器或多個進程在跑,每一個進程都擁有本身的內存空間,各個進程之間的數據共享就顯得很是重要。github

使用數據庫是一個解決數據共享的方案,但一些臨時性、高併發的數據並不太適合直接寫入數據庫,好比 session。redis

引入 Redis 能夠解決數據共享的問題,也由於 Redis 是基於內存存儲的特色,有着很是高的性能,能夠大大下降數據庫讀寫的壓力,提高應用的總體性能。數據庫

Redis 還能夠用來:緩存複雜的數據庫查詢結果,作自增加統計,暫存用戶操做狀態等功能。npm

安裝 Redis 客戶端

在開始使用 redis 以前,首先須要安裝 Redis 客戶端緩存

以 MAC OS 爲例,經過 brew 安裝 Redisbash

brew install redis

啓動 Redis服務器

redis-server

安裝 ioredis NPM 模塊

安裝 ioredissession

npm install ioredis

小試

var Redis = require('ioredis')
var redis = new Redis()

redis.set('test-redis-expire', 1)

// 設置過時時間 3s
redis.expire('test-redis-expire', 3)

redis.get('test-redis-expire', (err, value) => {
  console.log(value)
})

setTimeout(() => {
  redis.get('test-redis-expire', (err, value) => {
    console.log(value)
  })
}, 5000)

結果:併發

1
null

剛開始使用 redis 的時候很困惑,爲何 JAVA 調用 Redis 的語法看起來是同步的,到了 Node 就成了異步的呢,會不會存在什麼邏輯問題?

事實上,Node 調用 Redis 確實是異步的,只不過由於 Redis 是單線程的特色,任何操做都是原子操做。

在小試的代碼中,redis.set redis.get 都只是向 Redis 發送了一個通知,添加到了 Redis 的任務隊列中而已。

相關文章
相關標籤/搜索