node.js使用redis储存session(详细步骤)
转储session的原因
网上有许多session需要用数据库储存的原因,对我来说原因很简单,仅仅只是node的生产环境不允许将session存到服务器的内存中。会报一个内存溢出的风险警告。所以我决定将session转储到数据库中。而用于存储session的方案有许多,这里由于本人比较菜,所以选择了主流的redis来保存我的session状态
安装redis
首先既然要使用redis,那么第一步当然是将redis安装到服务器上,服务器一般都是linux的操作系统。
所以下面是linux的安装步骤
1.进入官网下载redis

2.将下载好的文件通过xftp上传到服务器并进行安装
这里我将安装包放到了/usr/local/src 的目录下

然后通过xshell来对其进行解压
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
文件内容如下
#!/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就可以保存用户的一些数据
接下来把刚才的两行代码
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中了,完结*★,°*:.☆\( ̄▽ ̄)/$:*.°★*。撒花!
node.js使用redis储存session(详细步骤)的更多相关文章
- 如何发布一个自定义Node.js模块到NPM(详细步骤)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- 在centos7中安装redis,并通过node.js操作redis
引言 最近在学习node.js 连接redis的模块,所以尝试了一下在虚拟机中安装cent OS7,并安装redis,并使用node.js 操作redis.所以顺便做个笔记. 如有不对的地方,欢迎大家 ...
- 记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程
一直忙着写毕设,上一次写博客还是元旦,大半年过去了.... 后面会不断分享各种新项目的源码与技术.欢迎关注一起学习哈! 记录一次部署微信小程序Node.js后端接口代码的详细过程,使用宝塔来部署. 我 ...
- node.js应用Redis数据库
node.js下使用Redis,首先: 1.有一台安装了Redis的服务器,当然,安装在本机也行 2.本机,也就是客户端,要装node.js 3.项目要安装nodejs_redis模块 注意第 3 点 ...
- 使用Node.js和Redis实现push服务--转载
出处:http://blog.csdn.net/unityoxb/article/details/8532028 push服务是一项很有用处的技术,它能改善交互,提升用户体验.要实现这项服务通常有两种 ...
- node.js,express入门看详细篇
先最简单的代码 安装 npm install express app.js 代码内容 const express = require('express') const app = express() ...
- node.js应用Redis初步
node.js下使用Redis,首先: 1.有一台安装了Redis的服务器,当然,安装在本机也行 2.本机,也就是客户端,要装node.js 3.项目要安装nodejs_redis模块 注意第 3 点 ...
- [Node.js]操作redis
摘要 在实际开发中,免不了要操作mysql,mongodb,redis等数据存储服务器.这里先简单介绍如何操作redis. 一个例子 关于redis服务端的安装这里不再介绍,重点不在这里.感兴趣的可以 ...
随机推荐
- Innodb锁相关总结
一.InnoDB共有七种类型的锁: (1)共享/排它锁(Shared and Exclusive Locks) (2)意向锁(Intention Locks) (3)插入意向锁(Insert Inte ...
- Mac 系统下 mysql 的安装与配置
1.mysql 的安装 1)官网下载 mysql 安装包:http://www.mysql.com/downloads/ 2)下载后解压打开安装包,点击 pkg 文件进行安装 3)注意:最后一步弹窗会 ...
- Java语法 [HelloWorld]
程序代码: public class lqx {// AAAAANBBBBCKJKSLJIOQL/*请手打哦!*/ public static void main (String[] args) { ...
- 译:SOS_SCHEDULER_YIELD类型等待在虚拟机环境中的增多
原文出处:Increased SOS_SCHEDULER_YIELD waits on virtual machines 注: 原文的用词是Increased,想译作增强(增长),或者加强,这么译起来 ...
- React createRef:引用
一 代码 import React, { Component } from 'react'; class Box extends Component { render() { return <b ...
- FortiGate防火墙500D下PC至外网丢包
1.现状: 如图,防火墙堆叠,500D共4个出口方向,联通.电信.FQ.运维专线 2.现象: 到网关和防火墙上.下联口不丢包,到网联通和运维专线方向丢包4%左右,电信和FQ方向不丢包 3.分析 采用从 ...
- Python基础-python数据类型之元祖、字典(四)
元祖 Python的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号. tuple=(1,2,3,4) print(tuple) 访问元祖 通过索引访问,也可以进行切片操 ...
- crontab命令详解 含启动/重启/停止
linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...
- etcd-v2第二集
参考文章:https://github.com/coreos/etcd/blob/master/Documentation/v2/api.mdhttp://www.cnblogs.com/zhengr ...
- 我的java学习之旅--一些基础
(因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...