广告
返回顶部
首页 > 资讯 > 数据库 >redis实现session共享的方法
  • 543
分享到

redis实现session共享的方法

redissession共享Redis共享Session 2023-04-14 15:04:44 543人浏览 独家记忆
摘要

目录引言案例介绍具体操作引言 大厂很多项目都是部署到多台服务器上,这些服务器在各个地区都存在,当我们访问服务时虽然执行的是同一个服务,但是可能是不同服务器运行的; 在我学习项目时遇到这样一个登录情景,假设有如下三台服务器

引言

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

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

image-20220617235237900

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

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

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

image-20220618000646960

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

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

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

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

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

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

案例介绍

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

image-20220618001028206

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

image-20220618001134687

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

image-20220618001344977

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

image-20220618001357723

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

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

image-20220618001513459

登录测试:

image-20220618001842004

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

image-20220618001613904

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

image-20220618002135986

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

具体操作

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

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

image-20220618002747593

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

image-20220618002914040

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

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

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<version>2.6.4</version>
</dependency>
<!-- Https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
	<version>2.6.3</version>
</dependency>

在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:

image-20220618003922346

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

登录:

image-20220618004305244

获取信息:

image-20220618004158416

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

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

到此这篇关于redis实现session共享的方法的文章就介绍到这了,更多相关redis session共享内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: redis实现session共享的方法

本文链接: https://www.lsjlt.com/news/201549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis实现session共享的方法
    目录引言案例介绍具体操作引言 大厂很多项目都是部署到多台服务器上,这些服务器在各个地区都存在,当我们访问服务时虽然执行的是同一个服务,但是可能是不同服务器运行的; 在我学习项目时遇到这样一个登录情景,假设有如下三台服务器...
    99+
    2023-04-14
    redis session共享 Redis共享 Session
  • redis实现session共享的方法是什么
    这篇文章主要介绍“redis实现session共享的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“redis实现session共享的方法是什么”文章能帮助大家解决问题。引言大厂很多项目都是...
    99+
    2023-07-06
  • Redis如何实现Session共享
    这篇文章运用简单易懂的例子给大家介绍Redis如何实现Session共享,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Redis实现Session共享这几天在做session共享这么一...
    99+
    2022-10-18
  • SpringBoot+SpringSession+Redis怎么实现session共享
    这篇文章主要介绍SpringBoot+SpringSession+Redis怎么实现session共享,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot是什么springboot一种全新的编程规范,其...
    99+
    2023-06-14
  • 在Spring-Session使用Redis如何实现共享session
    这期内容当中小编将会给大家带来有关在Spring-Session使用Redis如何实现共享session,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、添加依赖<dependency> &l...
    99+
    2023-05-31
    spring session redis
  • Redis解决Session共享问题的方法详解
    企业项目中,一般都是将项目部署到多台服务器上,用nginx做负载均衡。这样可以减轻单台服务器的压力,不过这样也带来一些问题,例如之前单机部署的话,session存取都是直接了当的,因为请求就只到这一台服务器上,不需要考虑...
    99+
    2022-07-11
    Redis解决Session共享 Redis Session共享
  • Redis实现Session共享与单点登录
    首先,导包。 在pom.XML文件里面加入以下: <dependency> <groupId>org.springframework.boot</groupId> <...
    99+
    2022-07-12
    RedisSession共享 RedisSession单点登录
  • spring boot与redis 实现session共享教程
    如果大家对spring boot不是很了解,大家可以参考下面两篇文章。Spring Boot 快速入门教程Spring Boot 快速入门指南这次带来的是spring boot + redis 实现session共享的教程。在spring ...
    99+
    2023-05-31
    spring boot redis
  • Redis的共享session应用实现短信登录
    目录1. 基于 session 实现短信登录1.1 短信登录流程图1.2 实现发送短信验证码1.3 实现短信验证码登录、注册1.4 实现登录校验拦截器2. 集群的 session 共享问题3. 基于 Redis 实现共享...
    99+
    2022-08-17
    Redissession短信登录 Redis共享session
  • Springsession实现Session共享
    目录Redis session为什么使用session共享:session 共享原理:Redis session 用户第一次访问应用,会创建一个新的Session,并且会将Sessi...
    99+
    2023-05-16
    Spring session 共享 Spring session
  • SpringCloud开启session共享并存储到Redis的实现
    目录一、原架构二、调整架构以及相应的代码1、Redis和session的配置2、增加配置类3、应答过滤器增加session设置4、增加控制台处理的过滤器ConsoleFilter5、...
    99+
    2023-02-14
    SpringCloud session共享 SpringCloud开启session共享 Redis存储
  • Spring session如何实现Session共享
    这篇文章主要介绍“Spring session如何实现Session共享”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring session如何实现Session共享”文章...
    99+
    2023-07-06
  • SpringSession+Redis实现集群会话共享的方法
    WEB应用开发完成后部署到Tomcat或其他容器中供用户访问. 小型应用在一台服务器上安装Tomcat并部署WEB应用. 随着访问量增大, Tomcat的压力会越来越大, 直至崩溃. 为了保证WEB应用的承...
    99+
    2022-10-18
  • Redis的共享session应用如何实现短信登录
    本篇内容介绍了“Redis的共享session应用如何实现短信登录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-19
  • 怎么在Spring Boot中利用Redis实现session共享
    本篇文章给大家分享的是有关怎么在Spring Boot中利用Redis实现session共享,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引入spring-boot-start...
    99+
    2023-05-30
    springboot session redis
  • tomcat的session共享怎么实现
    在Tomcat中,可以通过以下几种方式来实现Session共享:1. 使用Tomcat的集群功能:Tomcat提供了内置的集群功能,...
    99+
    2023-09-21
    tomcat
  • springcloud怎么实现Session共享
    本篇内容介绍了“springcloud怎么实现Session共享”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通常情况下,Tomcat、Je...
    99+
    2023-06-05
  • SpringBoot+SpringSession+Redis实现session共享及唯一登录示例
    最近在学习springboot,session这个点一直困扰了我好久,今天把这些天踩的坑分享出来吧,希望能帮助更多的人。 一、pom.xml配置  <depend...
    99+
    2022-11-12
  • Go实现共享库的方法
    目录共享库创建库使用库总结Don't Repeat Yourself 不要重复自己,这是软件开发的一个基本原则,目的就是减少重复。但是在系统中不同的部分,可能会有不同的业务逻...
    99+
    2023-02-24
    Go 共享库
  • Spring Boot/Spring Session/Redis的分布式Session共享如何解决
    本篇文章为大家展示了Spring Boot/Spring Session/Redis的分布式Session共享如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。分布式Web网站一般都会碰到集群s...
    99+
    2023-05-31
    springboot spring session redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作