node.js使用redis儲存session的方法

轉儲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重啓服務


相關文章
相關標籤/搜索