转储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(详细步骤)的更多相关文章

  1. 如何发布一个自定义Node.js模块到NPM(详细步骤)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  2. 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)

    咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...

  3. 在centos7中安装redis,并通过node.js操作redis

    引言 最近在学习node.js 连接redis的模块,所以尝试了一下在虚拟机中安装cent OS7,并安装redis,并使用node.js 操作redis.所以顺便做个笔记. 如有不对的地方,欢迎大家 ...

  4. 记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程

    一直忙着写毕设,上一次写博客还是元旦,大半年过去了.... 后面会不断分享各种新项目的源码与技术.欢迎关注一起学习哈! 记录一次部署微信小程序Node.js后端接口代码的详细过程,使用宝塔来部署. 我 ...

  5. node.js应用Redis数据库

    node.js下使用Redis,首先: 1.有一台安装了Redis的服务器,当然,安装在本机也行 2.本机,也就是客户端,要装node.js 3.项目要安装nodejs_redis模块 注意第 3 点 ...

  6. 使用Node.js和Redis实现push服务--转载

    出处:http://blog.csdn.net/unityoxb/article/details/8532028 push服务是一项很有用处的技术,它能改善交互,提升用户体验.要实现这项服务通常有两种 ...

  7. node.js,express入门看详细篇

    先最简单的代码 安装 npm install express app.js 代码内容 const express = require('express') const app = express() ...

  8. node.js应用Redis初步

    node.js下使用Redis,首先: 1.有一台安装了Redis的服务器,当然,安装在本机也行 2.本机,也就是客户端,要装node.js 3.项目要安装nodejs_redis模块 注意第 3 点 ...

  9. [Node.js]操作redis

    摘要 在实际开发中,免不了要操作mysql,mongodb,redis等数据存储服务器.这里先简单介绍如何操作redis. 一个例子 关于redis服务端的安装这里不再介绍,重点不在这里.感兴趣的可以 ...

随机推荐

  1. Myeclipse版本引发的css样式问题:头部自动生成一行代码导致样式引入不成功

    在运行新的项目之后,发现样式全部没了 利用开发者模式查看原因:是因为css样式文件的顶部自动生成了一行代码导致的 生成的代码:[genuitec-file-id="wc2-7"], ...

  2. Beta冲刺——第三天

    beta冲刺:第三天 各个成员今日完成的任务 成员 冯晓.马思远 彭辉.王爽 吴琼.郝延婷 今日完成任务 ·管理员管理功能模块下角色管理功能的完善测试 ·角色和权限部分代码规范 ·博客撰写 ·后台系统 ...

  3. Html转成Image

    html转图片,原来用了html2image.jar,但是做不到复杂的css js渲染效果. 在网友推荐下,可以用wkhtmltoimage插件,这是用谷歌浏览器的内核webkit,网上搜一下可以下载 ...

  4. 关于extern的使用

    学的时候不认真总结,用的时候就一堆bug. 上回也是调extern调了半天,今天又犯老毛病. data 比如说是要用到的的在main函数中不断刷新的量.那么这个unsigned int data 要写 ...

  5. js----作用域链

    作用域链是javascript的一个难点,要了解它就要了解作用域.变量.执行环境.生命周期等. 下面是找的资料加总结,加深理解. 作用域 变量的作用域可分为 A:全局作用域----最外层函数定义的变量 ...

  6. actuator/hystrix.stream 没有反应的方法

    http://localhost:8086/actuator/hystrix.stream 在启动类加上,就ok了 @Bean public ServletRegistrationBean hystr ...

  7. db2常见命令

    增加db2top命令的refresh间隔,默认值为2秒,下面的命令就可以每10秒刷新一次: $ db2top -i 10 -d sample 数据库本身太繁忙(dynamic SQL过多).建议增加 ...

  8. Spring MVC请求处理流程

    从web.xml中 servlet的配置开始, 根据servlet拦截的url-parttern,来进行请求转发   Spring MVC工作流程图   图一   图二    Spring工作流程描述 ...

  9. 封装的mybatis连接类

    package com.kevin.utils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSe ...

  10. java_22 Map接口

    1Map Collection是孤立存在的,向集合中存储元素是一个一个放进去的 Map中的集合存储是成对的,可以通过键找到值.即将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值 ...