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中了,完結*★,°*:.☆\( ̄▽ ̄)/$:*.°★*。撒花!


免責聲明!

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



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