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 相关文章推荐
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
Jan 22 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
基于JavaScript 类的使用详解
May 07 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
超详细的JS弹出窗口代码大全
Apr 18 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
解析vue中的$mount
Dec 21 Javascript
详解React之父子组件传递和其它一些要点
Jun 25 Javascript
如何在Vue.js中实现标签页组件详解
Jan 02 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 11 Javascript
ant-design-vue按需加载的坑的解决
May 14 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
Jul 09 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
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
PHP设计模式之建造者模式定义与用法简单示例
2018/08/13 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
JQuery开发的数独游戏代码
2010/10/29 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
Python 加密的实例详解
2017/10/09 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
如何使用Python调整图像大小
2020/09/26 Python
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
股东授权委托书范文
2014/09/13 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
旷工检讨书1000字
2015/01/01 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS