若是一個 Node 應用有多臺服務器或多個進程在跑,每一個進程都擁有本身的內存空間,各個進程之間的數據共享就顯得很是重要。git
使用數據庫是一個解決數據共享的方案,但一些臨時性、高併發的數據並不太適合直接寫入數據庫,好比 session。github
引入 Redis 能夠解決數據共享的問題,也由於 Redis 是基於內存存儲的特色,有着很是高的性能,能夠大大下降數據庫讀寫的壓力,提高應用的總體性能。redis
Redis 還能夠用來:緩存複雜的數據庫查詢結果,作自增加統計,暫存用戶操做狀態等功能。數據庫
在開始使用 redis 以前,首先須要安裝 Redis 客戶端npm
以 MAC OS 爲例,經過 brew 安裝 Redis緩存
brew install redis
啓動 Redisbash
redis-server
安裝 ioredis服務器
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)
結果:session
1 null
剛開始使用 redis 的時候很困惑,爲何 JAVA 調用 Redis 的語法看起來是同步的,到了 Node 就成了異步的呢,會不會存在什麼邏輯問題?併發
事實上,Node 調用 Redis 確實是異步的,只不過由於 Redis 是單線程的特色,任何操做都是原子操做。
在小試的代碼中,redis.set
redis.get
都只是向 Redis 發送了一個通知,添加到了 Redis 的任務隊列中而已。