0

0

redis实现session共享的方法是什么

PHPz

PHPz

发布时间:2023-05-30 13:28:06

|

2380人浏览过

|

来源于亿速云

转载

引言

大厂很多项目都是部署到多台服务器上,这些服务器在各个地区都存在,当我们访问服务时虽然执行的是同一个服务,但是可能是不同服务器运行的;

在我学习项目时遇到这样一个登录情景,假设有如下三台服务器(如图),就使用session存放用户的登录信息,通过该信息可以判断用户是否登录:

redis实现session共享的方法是什么

假设本次登录是通过服务器01执行的,那么这次的登录session信息就存放到了内存01中;但是当我再次访问时却是服务器02执行操作,而登录session信息却在内存01中,服务器02无法获取,所以它就会判断我没有登录,返回错误的信息…

我们想要实现的就是通过一台服务器登录所生成的session可以和其他服务器共享,那么该如何实现?

解决方法 思路就是既然这几个服务器自己的内存不能共享,那么只要有一个共享空间供这几个服务器共同访问不就可以了(如图);

redis实现session共享的方法是什么

首先想到的应该就是数据库,只要这些服务器集群共享一个数据库,并把生成的session信息存放到数据库中不就可以了,这样大家都可以访问;数据库有关系型和非关系型(NoSql):

  • 关系型数据库:Mysql等

  • 非关系型数据库:Redis(K/V数据库)等

这里其实选择非关系型数据库最好,因为Redis基于内存,读写性能高,很适合这种用户信息频繁读取的情况;

还可以通过文件服务器实现,这里就不介绍了;

还有一种方法,可以通过nginx的iphash实现,该方法非常简单,但是思路和上面两种不同,原理就是同一个ip的所有请求都会被nginx进行iphash进行计算,将结果绑定到指定服务器,之后这个请求都会访问到该服务器中。
但是这样就有一些问题,首先就算负载均衡就没有太大意义了,如果绑定的服务器挂了,那么iphash也就失效了;又或者你的请求被其他服务分发而未走nginx服务,那么iphash同样不生效;所以谨慎使用;

下面我就简单通过代码模拟一下如何通过redis配置轻松实现session共享

案例介绍

这里有一个用户管理项目,在登录时登录逻辑代码会记录下来登录用户的session信息:

redis实现session共享的方法是什么

然后同时开启了该项目的两个服务:localhost:8080和localhost:8082(可以当作两台不同服务器上运行的项目)

redis实现session共享的方法是什么

开启服务后可以访问对应的接口文档:

redis实现session共享的方法是什么

-----------------------------------分割线-------------------------------------------

redis实现session共享的方法是什么

该服务都有以下两个接口:(以下测试是在同一个服务中测试的)

登录接口:记录登录用户session信息

redis实现session共享的方法是什么

登录测试:

redis实现session共享的方法是什么

微信二级防封域名
微信二级防封域名

防封域名方法千千种,我们只做最简单且有用的这一种。微信域名防封是指通过技术手段来实现预付措施,一切说自己完全可以防封的那都是不可能的,一切说什么免死域名不会死的那也是吹牛逼的。我们正在做的是让我们的推广域名寿命更长一点,成本更低一点,效果更好一点。本源码采用 ASP+ACCESS 搭建,由于要用到二级域名,所以需要使用独享云虚机或者云服务器,不支持虚拟主机使用,不支持本地测试。目前这是免费测试版,

下载

获取当前用户信息接口:通过登录session获取当前用户信息

redis实现session共享的方法是什么

获取当前登录用户信息测试:

redis实现session共享的方法是什么

因为现在这是两个服务,所以肯定实现不了共享session的,就算在8080端口的服务登录了,也无法在8082端口的服务获取到当前用户信息;(再次强调:上面测试可以获取到当前用户信息是因为在同一个服务中测试的,同一个服务session存放到他自己的内存中当然可以自己访问了)

具体操作

下面就通过redis配置实现共享session:

首先要下载redis,下载网上找教程;这里我直接用的在服务器上通过docker创建的redis容器(简单好用,强烈推荐):

redis实现session共享的方法是什么

通过可视化工具可以连接一下:

redis实现session共享的方法是什么

这样redis就配置好了,下面在项目代码中配置redis:

在项目中引入redis依赖和spring-session配置依赖(自动将 session 存储到 redis 中):



	org.springframework.boot
	spring-boot-starter-data-redis
	2.6.4



	org.springframework.session
	spring-session-data-redis
	2.6.3

在application.yml文件中配置连接redis和session相关配置:

spring:
  # session配置
  session:
    timeout: 86400 # 设置session失效时间
    store-type: redis # 修改spring-session存储配置,默认存储到服务器内存中,现在设置存到redis中(关键)
  # redis配置
  redis:
    port: 8081 # redis的端口号(这里是我的redis容器在docker中对应的端口号)
    host: xx.xxx.xxx.xxx # 我的云服务器ip
    database: 0 # 设置存入redis的哪一个库(默认是0)

其实关键配置就一个: store-type: redis,只要配置了这个,那么代码中session就会存放到redis中而不是自己的内存中;

接下来就可以测试了:

调用登录接口,生成用户session信息,查看redis:

redis实现session共享的方法是什么

可以看到用户登录session已经存放到redis中了,这样我在8080端口登录,在8082也可以获取到登录的session信息:

登录:

redis实现session共享的方法是什么

获取信息:

redis实现session共享的方法是什么

这样就通过redis实现session共享了;

需要注意:引入redis和spring-redis依赖版本需要接近。

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

20

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

28

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

149

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

120

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

41

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

14

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

23

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

168

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

Redis+MySQL数据库面试教程
Redis+MySQL数据库面试教程

共72课时 | 6.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号