在專案開發中,為了做分散式,於是開始使用redis,這裡對redis的學習做一個總結。
背景
之前樓主在專案開發中,在node層使用session來記錄使用者的登入態,本地跑著完全沒有問題,但是當專案進行分散式部署的時候,發現現實卻不是想象的那麼美好。
- 場景1:分散式情況下本地session會導致登入態錯亂
- 場景2:多瀏覽器資訊不同步
於是,在node層,我們接入了redis。
what
REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value儲存系統。值的型別有以下幾種:
- 字串(String)
- 雜湊(Map)
- 列表(list)
- 集合(sets)
- 有序集合(sorted sets)
安裝
接著,我們來看下在node中怎麼使用redis。
第一步,當然是先安裝啦~
在本地開發的時候,我們可以在我們的電腦安裝redis服務,開啟之後可以使用node進行連線。
我這裡用的是windows的機器,先到 redis 下載一個安裝包,然後按照提示直接安裝即可。
進入redis目錄,開啟cmd,然後執行以下命令,redis服務就跑起來了~
redis-server.exe redis.windows.conf
複製程式碼
想試試服務有沒有啟動成功,可以使用redis的cli工具,我們可以直接操作redis~
tips:安裝本地redis只是為了方便本地除錯,一般情況下,專案中都會使用遠端的redis,這樣才能確保資料的統一性。
使用
安裝完之後,接下來我們就要來看看怎麼在node服務中使用redis。
session - redis
一般情況下,我們的專案都會做分散式,確保系統的可靠性。所以,像登入態這種資訊就需要存到資料庫中,一般會使用redis,也可以使用其他資料庫~
這裡使用的node框架是express,所以我們要先安裝這幾個依賴
npm install express
npm install express-session
npm install connect-redis
複製程式碼
然後,專案初始化連結session的時候,直接配置即可。
let express = require('express');
let session = require('express-session');
let RedisStore = require('connect-redis')(session);
let app = express();
// 本地session
app.use(session({
secret: config.session.secret,
cookie: { maxAge: 2 * 60 * 60 * 1000 }
}));
// redis session
app.use(session({
name: 'binnie.sid',
store: new RedisStore({
host: host,
port: port,
pass: pass,
db: db,
ttl: 7200
}),
secret: secret,
resave: false,
saveUninitialized: true
}));
複製程式碼
直連redis
大部分情況下,session即可解決分散式問題。當然也有解決不了的問題,比如使用者切換瀏覽器的時候,session其實就會改變。
栗子:我的網站,一個使用者同時只能觀看一個視訊,使用session的情況下,如果該使用者換個瀏覽器,那麼,我就識別不出來了。而使用redis,按照使用者id來進行區分,那麼我們就可以對使用者進行限制!
let redis = require('redis');
let client = redis.createClient({
host: host,
port: port,
password: pass
});
client.auth(config.redis.pass, function() {
logger.info('redis auth ok');
});
client.on('connect', function() {
logger.info('redis connect ok');
});
client.on('ready', function() {
logger.info('redis ready ok');
});
// 讀取redis
client.get(key, function(err, reply) {})
// 設定redis
client.set(key, value, redis.print);
複製程式碼
寫在最後
做前端的時候可能會比較少接觸redis,接觸node服務到後續分散式其實就會用到的,對前端同學來說學會使用redis並不難~
今天又是美好的一天~