您好,登錄后才能下訂單哦!
轉(zhuǎn)儲(chǔ)session的原因
網(wǎng)上有許多session需要用數(shù)據(jù)庫(kù)儲(chǔ)存的原因,對(duì)我來(lái)說(shuō)原因很簡(jiǎn)單,僅僅只是node的生產(chǎn)環(huán)境不允許將session存到服務(wù)器的內(nèi)存中。會(huì)報(bào)一個(gè)內(nèi)存溢出的風(fēng)險(xiǎn)警告。所以我決定將session轉(zhuǎn)儲(chǔ)到數(shù)據(jù)庫(kù)中。而用于存儲(chǔ)session的方案有許多,這里由于本人比較菜,所以選擇了主流的redis來(lái)保存我的session狀態(tài)
安裝redis
首先既然要使用redis,那么第一步當(dāng)然是將redis安裝到服務(wù)器上,服務(wù)器一般都是linux的操作系統(tǒng)。
所以下面是linux的安裝步驟
1.進(jìn)入官網(wǎng)下載redis
2.將下載好的文件通過(guò)xftp上傳到服務(wù)器并進(jìn)行安裝
這里我將安裝包放到了/usr/local/src 的目錄下
然后通過(guò)xshell來(lái)對(duì)其進(jìn)行解壓
cd /usr/local/src //進(jìn)入存放redis的文件 tar -xzvf redis-4.0.11.tar.gz //解壓文件
解壓完成后進(jìn)入解壓后的文件夾對(duì)其進(jìn)行編譯
編譯完成后就可以對(duì)其進(jìn)行配置
打開(kāi)配置文件
vim redis.conf
為了讓其在后臺(tái)運(yùn)行
需將其修改為守護(hù)進(jìn)程模式
然后給redis設(shè)置密碼
修改完成按esc退出
:wq保存
然后將redis設(shè)置為開(kāi)機(jī)啟動(dòng)
首先新建redis的開(kāi)機(jī)啟動(dòng)腳本
vim /etc/init.d/redis
文件內(nèi)容如下
#!/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配置文件中有
如下圖
編輯完成后保存退出
然后添加開(kāi)機(jī)啟動(dòng)服務(wù)
vim /etc/rc.local
進(jìn)入文件后在末尾添加
service redis start
保存退出
然后設(shè)置權(quán)限
chmod 755 /etc/init.d/redis
設(shè)置完成后注冊(cè)系統(tǒng)服務(wù)
chkconfig --add redis
然后測(cè)試一下redis能否啟動(dòng)
進(jìn)入redis文件夾后
輸入
service redis start
啟動(dòng)成功后我們看一下redis是否配置成功
ps -ef|grep redis
沒(méi)有問(wèn)題就可以創(chuàng)建軟連接了
ln -s /usr/local/src/redis-4.0.11/src/redis-cli /usr/bin/redis
測(cè)試redis
軟連接創(chuàng)建完直接在命令行輸入
redis即可
這里要輸入你在配置文件中設(shè)置的密碼
到這里redis就安裝完成了
配置防火墻
在上面的配置完成后我們還不能正常使用
還需要對(duì)防火墻進(jìn)行配置
我們先查看一下端口的情況
netstat -lntp
我們可以看到6379已經(jīng)被正確監(jiān)聽(tīng)了
在這里由于我并不會(huì)對(duì)redis進(jìn)行什么操作
也不關(guān)心它保存的數(shù)據(jù),所以我不需要從外網(wǎng)對(duì)redis進(jìn)行訪問(wèn),因?yàn)樗皇菚捍嬉幌马?xiàng)目的session
所以我這里就不開(kāi)放防火墻上的端口了
如果需要開(kāi)放的小伙伴
使用以下命令
firewall-cmd --zone= public --add-port=這里是你想開(kāi)啟的端口 /tcp --permanent (--permanent永久生效,沒(méi)有此參數(shù)重啟后失效)
firewall-cmd --reload 重啟防火墻
在node中使用redis
redis已經(jīng)安裝完成了
接下來(lái)就是在node中使用redis來(lái)暫存session了
首先在package.json中安裝
redis模塊,connect-redis模塊
"redis": "^2.8.0"
"connect-redis":"^3.3.3"
重新安裝一下依賴
cnpm i
這里由于npm比較慢所以我用的cnpm
然后就可以在代碼中使用了
先看一下原本沒(méi)用redis的代碼
我用express-session來(lái)保存用戶狀態(tài)
有這一行代碼
使用req.session就可以保存用戶的一些數(shù)據(jù)
接下來(lái)把剛才的兩行代碼
session = require('express-session'); app.use(session({secret:'lhy2018'}));
修改為如下代碼
session = require('express-session'), redis = require('redis'), client = redis.createClient({password:"lhy"}),//這里填寫(xiě)redis的密碼 RedisStore = require('connect-redis')(session); client.on("error", function (err) { console.log("Error " + err);//用于提示錯(cuò)誤信息 }); let options = { client:client, port:6379,//端口號(hào) host:"127.0.0.1"http://主機(jī) }; app.use(session( { store: new RedisStore(options), secret:"lhy2018"http://以此字符串加密 }));
這樣使用req.session就可以將你想保存的會(huì)話數(shù)據(jù)存到redis中了
就可以避免內(nèi)存溢出的風(fēng)險(xiǎn)了
然后用pm2重啟服務(wù)
總結(jié)
以上所述是小編給大家介紹的node.js使用redis儲(chǔ)存session的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。