轉儲session的緣由前端
網上有許多session須要用數據庫儲存的緣由,對我來講緣由很簡單,僅僅只是node的生產環境不容許將session存到服務器的內存中。會報一個內存溢出的風險警告。因此我決定將session轉儲到數據庫中。而用於存儲session的方案有許多,這裏因爲本人比較菜,因此選擇了主流的redis來保存個人session狀態node
安裝redislinux
前端精品教程:百度網盤下載redis
首先既然要使用redis,那麼第一步固然是將redis安裝到服務器上,服務器通常都是linux的操做系統。shell
因此下面是linux的安裝步驟數據庫
1.進入官網下載redisexpress
2.將下載好的文件經過xftp上傳到服務器並進行安裝npm
前端精品教程:百度網盤下載json
這裏我將安裝包放到了/usr/local/src 的目錄下vim
而後經過xshell來對其進行解壓
1
2
|
cd /usr/local/src
//進入存放redis的文件
tar -xzvf redis-4.0.11.tar.gz
//解壓文件
|
解壓完成後進入解壓後的文件夾對其進行編譯
編譯完成後就能夠對其進行配置
打開配置文件
vim redis.conf
爲了讓其在後臺運行
需將其修改成守護進程模式
而後給redis設置密碼
修改完成按esc退出
:wq保存
而後將redis設置爲開機啓動
前端精品教程:百度網盤下載
首先新建redis的開機啓動腳本
vim /etc/init.d/redis
文件內容以下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#!/bin/sh
# chkconfig: 2345 80 90
# description: Start and Stop redis
#PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/src/redis-4.0.11/src/redis-server
REDIS_CLI=/usr/local/src/redis-4.0.11/src/redis-cli
PIDFILE=/
var
/run/redis_6379.pid
CONF=
"/usr/local/src/redis-4.0.11/redis.conf"
AUTH=
"lhy"
case
"$1"
in
start)
if
[ -f $PIDFILE ]
then
echo
"$PIDFILE exists, process is already running or crashed"
else
echo
"Starting Redis server..."
$EXEC $CONF
fi
if
[
"$?"
=
"0"
]
then
echo
"Redis is running..."
fi
;;
stop)
if
[ ! -f $PIDFILE ]
then
echo
"$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo
"Stopping ..."
$REDIS_CLI -p $REDISPORT SHUTDOWN
while
[ -x ${PIDFILE} ]
do
echo
"Waiting for Redis to shutdown ..."
sleep 1
done
echo
"Redis stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo
"Usage: /etc/init.d/redis {start|stop|restart|force-reload}"
>&2
exit 1
esac
|
這裏的pidfile 在redis.conf配置文件中有
以下圖
編輯完成後保存退出
而後添加開機啓動服務
vim /etc/rc.local
進入文件後在末尾添加
service redis start
保存退出
而後設置權限
chmod 755 /etc/init.d/redis
設置完成後註冊系統服務
chkconfig --add redis
而後測試一下redis可否啓動
進入redis文件夾後
輸入
service redis start
啓動成功後咱們看一下redis是否配置成功
ps -ef|grep redis
沒有問題就能夠建立軟鏈接了
ln -s /usr/local/src/redis-4.0.11/src/redis-cli /usr/bin/redis
測試redis
軟鏈接建立完直接在命令行輸入
redis便可
這裏要輸入你在配置文件中設置的密碼
到這裏redis就安裝完成了
配置防火牆
在上面的配置完成後咱們還不能正常使用
還須要對防火牆進行配置
咱們先查看一下端口的狀況
netstat -lntp
咱們能夠看到6379已經被正確監聽了
在這裏因爲我並不會對redis進行什麼操做
也不關心它保存的數據,因此我不須要從外網對redis進行訪問,由於它只是暫存一下項目的session
因此我這裏就不開放防火牆上的端口了
若是須要開放的小夥伴
使用如下命令
firewall-cmd --zone= public --add-port=這裏是你想開啓的端口 /tcp --permanent (--permanent永久生效,沒有此參數重啓後失效)
firewall-cmd --reload 重啓防火牆
在node中使用redis
redis已經安裝完成了
接下來就是在node中使用redis來暫存session了
首先在package.json中安裝
redis模塊,connect-redis模塊
"redis": "^2.8.0"
"connect-redis":"^3.3.3"
從新安裝一下依賴
cnpm i
這裏因爲npm比較慢因此我用的cnpm
而後就能夠在代碼中使用了
先看一下本來沒用redis的代碼
我用express-session來保存用戶狀態
有這一行代碼
使用req.session就能夠保存用戶的一些數據
接下來把剛纔的兩行代碼
1
2
|
session = require(
'express-session'
);
app.use(session({secret:
'lhy2018'
}));
|
修改成以下代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
session = require(
'express-session'
),
redis = require(
'redis'
),
client = redis.createClient({password:
"lhy"
}),
//這裏填寫redis的密碼
RedisStore = require(
'connect-redis'
)(session);
client.on(
"error"
,
function
(err) {
console.log(
"Error "
+ err);
//用於提示錯誤信息
});
let options = {
client:client,
port:6379,
//端口號
host:
"127.0.0.1"
//主機
};
app.use(session( {
store:
new
RedisStore(options),
secret:
"lhy2018"
//以此字符串加密
}));
|
這樣使用req.session就能夠將你想保存的會話數據存到redis中了
就能夠避免內存溢出的風險了
而後用pm2重啓服務