1. 程式人生 > >node.js使用redis儲存session(詳細步驟)

node.js使用redis儲存session(詳細步驟)

轉儲session的原因

網上有許多session需要用資料庫儲存的原因,對我來說原因很簡單,僅僅只是node的生產環境不允許將session存到伺服器的記憶體中。會報一個記憶體溢位的風險警告。所以我決定將session轉儲到資料庫中。而用於儲存session的方案有許多,這裡由於本人比較菜,所以選擇了主流的redis來儲存我的session狀態

安裝redis

首先既然要使用redis,那麼第一步當然是將redis安裝到伺服器上,伺服器一般都是linux的作業系統。

所以下面是linux的安裝步驟

1.進入官網下載redis

2.將下載好的檔案通過xftp上傳到伺服器並進行安裝

這裡我將安裝包放到了/usr/local/src 的目錄下

然後通過xshell來對其進行解壓

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 

檔案內容如下

 #!/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就可以儲存使用者的一些資料

接下來把剛才的兩行程式碼

session = require('express-session');

app.use(session({secret:'lhy2018'}));

修改為如下程式碼

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重啟服務

到這裡就已經成功將session的值存到redis中了,完結*★,°*:.☆\( ̄▽ ̄)/$:*.°★*。撒花!