Node Redis 小試


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

 

背景

如果一個 Node 應用有多台服務器或多個進程在跑,每個進程都擁有自己的內存空間,各個進程之間的數據共享就顯得非常重要。

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

引入 Redis 可以解決數據共享的問題,也因為 Redis 是基於內存存儲的特點,有着非常高的性能,可以大大降低數據庫讀寫的壓力,提升應用的整體性能。

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

安裝 Redis 客戶端

在開始使用 redis 之前,首先需要安裝 Redis 客戶端

以 MAC OS 為例,通過 brew 安裝 Redis

brew install redis

啟動 Redis

redis-server

安裝 ioredis NPM 模塊

安裝 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)

結果:

1
null

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

事實上,Node 調用 Redis 確實是異步的,只不過因為 Redis 是單線程的特點,任何操作都是原子操作。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM