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重启服务


相关文章
相关标签/搜索