转储session的原因

网上有许多session需要用数据库储存的原因,对我来说原因很简单,仅仅只是node的生产环境不允许将session存到服务器的内存中。会报一个内存溢出的风险警告。所以我决定将session转储到数据库中。而用于存储session的方案有许多,这里由于本人比较菜,所以选择了主流的redis来保存我的session状态

安装redis

前端精品教程:百度网盘下载

首先既然要使用redis,那么第一步当然是将redis安装到服务器上,服务器一般都是linux的操作系统。

所以下面是linux的安装步骤

1.进入官网下载redis

如何将session保存在redis里 怎么把session保存到redis_前端

2.将下载好的文件通过xftp上传到服务器并进行安装

前端精品教程:百度网盘下载

这里我将安装包放到了/usr/local/src 的目录下

如何将session保存在redis里 怎么把session保存到redis_开发工具_02

然后通过xshell来对其进行解压


cd /usr/local/src            //进入存放redis的文件          


           tar -xzvf redis-4.0.11.tar.gz            //解压文件




解压完成后进入解压后的文件夹对其进行编译

如何将session保存在redis里 怎么把session保存到redis_如何将session保存在redis里_03

编译完成后就可以对其进行配置

打开配置文件

vim redis.conf

为了让其在后台运行

需将其修改为守护进程模式

如何将session保存在redis里 怎么把session保存到redis_ViewUI_04

然后给redis设置密码

如何将session保存在redis里 怎么把session保存到redis_开发工具_05

修改完成按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


如何将session保存在redis里 怎么把session保存到redis_开发工具_06

这里的pidfile 在redis.conf配置文件中有

如下图

如何将session保存在redis里 怎么把session保存到redis_如何将session保存在redis里_07

编辑完成后保存退出

然后添加开机启动服务

vim /etc/rc.local

进入文件后在末尾添加

service redis start

保存退出

如何将session保存在redis里 怎么把session保存到redis_开发工具_08

然后设置权限

chmod 755 /etc/init.d/redis

设置完成后注册系统服务

chkconfig --add redis

然后测试一下redis能否启动

进入redis文件夹后

输入

service redis start

如何将session保存在redis里 怎么把session保存到redis_ViewUI_09

启动成功后我们看一下redis是否配置成功

ps -ef|grep redis

如何将session保存在redis里 怎么把session保存到redis_前端_10

没有问题就可以创建软连接了

ln -s /usr/local/src/redis-4.0.11/src/redis-cli /usr/bin/redis

测试redis

软连接创建完直接在命令行输入

如何将session保存在redis里 怎么把session保存到redis_数据库_11

redis即可

这里要输入你在配置文件中设置的密码

到这里redis就安装完成了

配置防火墙

在上面的配置完成后我们还不能正常使用

还需要对防火墙进行配置

我们先查看一下端口的情况

netstat -lntp

如何将session保存在redis里 怎么把session保存到redis_前端_12

我们可以看到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来保存用户状态

如何将session保存在redis里 怎么把session保存到redis_如何将session保存在redis里_13

有这一行代码

使用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里 怎么把session保存到redis_前端_14