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