经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
node.js使用redis储存session的方法
来源:jb51  时间:2018/9/27 16:26:41  对本文有异议

转储session的原因

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

安装redis

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

所以下面是linux的安装步骤

1.进入官网下载redis


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

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

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

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

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


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

打开配置文件

vim redis.conf

为了让其在后台运行

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


然后给redis设置密码


修改完成按esc退出

:wq保存

然后将redis设置为开机启动

首先新建redis的开机启动脚本

vim /etc/init.d/redis

文件内容如下

  1. #!/bin/sh
  2. # chkconfig: 2345 80 90
  3. # description: Start and Stop redis
  4. #PATH=/usr/local/bin:/sbin:/usr/bin:/bin
  5. REDISPORT=6379
  6. EXEC=/usr/local/src/redis-4.0.11/src/redis-server
  7. REDIS_CLI=/usr/local/src/redis-4.0.11/src/redis-cli
  8. PIDFILE=/var/run/redis_6379.pid
  9. CONF="/usr/local/src/redis-4.0.11/redis.conf"
  10. AUTH="lhy"
  11.  
  12. case "$1" in
  13. start)
  14. if [ -f $PIDFILE ]
  15. then
  16. echo "$PIDFILE exists, process is already running or crashed"
  17. else
  18. echo "Starting Redis server..."
  19. $EXEC $CONF
  20. fi
  21. if [ "$?"="0" ]
  22. then
  23. echo "Redis is running..."
  24. fi
  25. ;;
  26. stop)
  27. if [ ! -f $PIDFILE ]
  28. then
  29. echo "$PIDFILE does not exist, process is not running"
  30. else
  31. PID=$(cat $PIDFILE)
  32. echo "Stopping ..."
  33. $REDIS_CLI -p $REDISPORT SHUTDOWN
  34. while [ -x ${PIDFILE} ]
  35. do
  36. echo "Waiting for Redis to shutdown ..."
  37. sleep 1
  38. done
  39. echo "Redis stopped"
  40. fi
  41. ;;
  42. restart|force-reload)
  43. ${0} stop
  44. ${0} start
  45. ;;
  46. *)
  47. echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
  48. exit 1
  49. 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. session = require('express-session');
  2. app.use(session({secret:'lhy2018'}));

修改为如下代码

  1. session = require('express-session'),
  2. redis = require('redis'),
  3. client = redis.createClient({password:"lhy"}),//这里填写redis的密码
  4. RedisStore = require('connect-redis')(session);
  5. client.on("error", function (err) {
  6. console.log("Error " + err);//用于提示错误信息
  7. });
  8. let options = {
  9. client:client,
  10. port:6379,//端口号
  11. host:"127.0.0.1"//主机
  12. };
  13. app.use(session( {
  14. store: new RedisStore(options),
  15. secret:"lhy2018"//以此字符串加密
  16. }));

这样使用req.session就可以将你想保存的会话数据存到redis中了

就可以避免内存溢出的风险了

然后用pm2重启服务


总结

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号