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


Posted in Javascript onSeptember 26, 2018

转储session的原因

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

安装redis

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

所以下面是linux的安装步骤

1.进入官网下载redis

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

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

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

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

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

cd /usr/local/src //进入存放redis的文件
tar -xzvf redis-4.0.11.tar.gz //解压文件

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

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

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

打开配置文件

vim redis.conf

为了让其在后台运行

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

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

然后给redis设置密码

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

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

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

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

如下图

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

编辑完成后保存退出

然后添加开机启动服务

vim /etc/rc.local

进入文件后在末尾添加

service redis start

保存退出

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

然后设置权限

chmod 755 /etc/init.d/redis

设置完成后注册系统服务

chkconfig --add redis

然后测试一下redis能否启动

进入redis文件夹后

输入

service redis start

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

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

ps -ef|grep redis

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

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

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

测试redis

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

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

redis即可

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

到这里redis就安装完成了

配置防火墙

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

还需要对防火墙进行配置

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

netstat -lntp

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

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

node.js使用redis储存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重启服务

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

总结

以上所述是小编给大家介绍的node.js使用redis储存session的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
Dec 28 Javascript
JavaScript实现网页对象拖放功能的方法
Apr 15 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
Aug 27 Javascript
Jquery中map函数的用法
Jun 03 Javascript
js利用正则表达式检验输入内容是否为网址
Jul 05 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
使用Dropzone.js上传的示例代码
Oct 10 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
Mar 13 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 Javascript
详解Axios统一错误处理与后置
Sep 26 #Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 #Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 #Javascript
基于vue v-for 多层循环嵌套获取行数的方法
Sep 26 #Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
Sep 26 #Javascript
原生JS实现简单的无缝自动轮播效果
Sep 26 #Javascript
Vue中控制v-for循环次数的实现方法
Sep 26 #Javascript
You might like
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
matplotlib实现区域颜色填充
2019/03/18 Python
python 三元运算符使用解析
2019/09/16 Python
如何使用python传入不确定个数参数
2020/02/18 Python
Python新手学习标准库模块命名
2020/05/29 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
英文自荐信
2013/12/19 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
公司应聘求职信
2014/06/21 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android