我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis解决Session共享问题的方法详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis解决Session共享问题的方法详解

企业项目中,一般都是将项目部署到多台服务器上,用nginx做负载均衡。这样可以减轻单台服务器的压力,不过这样也带来一些问题,例如之前单机部署的话,session存取都是直接了当的,因为请求就只到这一台服务器上,不需要考虑数据共享。接下来分别用8000和8001端口启动同一个项目,做一个简单演示:

Redis解决Session共享问题的方法详解

测试接口代码:

package com.wl.standard.controller;
 
import cn.hutool.core.util.StrUtil;
import com.wl.standard.common.result.HttpResult;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import Javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
 

@Api(tags = "测试接口")
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
 
    @Resource
    Environment environment;
 
    @GetMapping("/demo")
    public HttpResult demo(HttpServletRequest request) {
        int maxInactiveInterval = request.getSession().getMaxInactiveInterval();
        log.info("session过期时间: {}秒", maxInactiveInterval);
        String port = (String) request.getSession().getAttribute("port");
        if (StrUtil.isEmpty(port)) {
            //获取当前服务端口
            port = environment.getProperty("local.server.port");
            request.getSession().setAttribute("port", port);
        }
        log.info("session-port: {}", port);
        return HttpResult.success(port);
    }
}

进入swagger的接口文档页面,进行测试接口请求:

Redis解决Session共享问题的方法详解

8000端口控制台输出:

Redis解决Session共享问题的方法详解

然后请求8001的同一个接口:

Redis解决Session共享问题的方法详解

从上面两张图可以看出虽然是同一套代码,去session里获取的同一个参数,2个端口获取的值却不同,这就是分布式中需要解决的问题:数据共享。

之前的文章有讲过用Redis做分布式锁,其实这里也可以用redis解决session共享的问题。

在引入redis之前,先简单贴一下怎么在配置文件里修改session默认过期时间。从上图可以看到session默认过期时间是1800秒,也就是30分钟,如果想要延长,可以在配置文件application.yml中修改:

server:
  port: 8000
  servlet:
    session:
      timeout: 3600 #延长session过期时间到1小时

回归正题,要用redis解决session共享,首先需要引入依赖包:

<!--springboot中的redis依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
      <dependency>
          <groupId>org.springframework.session</groupId>
          <artifactId>spring-session-data-redis</artifactId>
      </dependency>

然后还需要在配置文件中配置:

spring:
  # session配置
  session:
    timeout: 7200 # 设置session失效时间
    store-type: redis # 修改spring-session存储配置,默认存储到服务器内存中,现在设置存到redis中(关键)

其实这里也可以设置session的过期时间,为了和上面的作对比,此处设置过期时间为2小时。

无需修改代码,重新启动2个端口,再分别请求同一个接口:

8000端口控制台输出:

Redis解决Session共享问题的方法详解

8001端口控制台输出:

Redis解决Session共享问题的方法详解

再看redis:

Redis解决Session共享问题的方法详解

另外值得注意的是,当上面2处都配置session过期时间时,实际是以spring下的配置为准的。

以上就是Redis解决Session共享问题的方法详解的详细内容,更多关于Redis解决Session共享的资料请关注我们其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis解决Session共享问题的方法详解

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

下载Word文档

猜你喜欢

Redis解决Session共享问题的方法详解

企业项目中,一般都是将项目部署到多台服务器上,用nginx做负载均衡。这样可以减轻单台服务器的压力编程,不过这样也www.cppcns.com带来一些问题,例如之前单机部署的话,session存取都是直接了当的,因为请求就只到这一台服务器上
2022-07-11

redis实现session共享的方法

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

利用Spring Session和redis对Session进行共享详解

前言我们在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。session的处理有很多种方法,详情见转载的上篇博客:集群/分布式环境下5种session处理策略在这里我们讨论其中的第三种方法:session共享
2023-05-31

Spring Boot/Spring Session/Redis的分布式Session共享如何解决

本篇文章为大家展示了Spring Boot/Spring Session/Redis的分布式Session共享如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。分布式Web网站一般都会碰到集群s
2023-05-31

android与asp.net服务端共享session的方法详解

前言最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需要在android客户
2023-05-30

PHP session共享的解决方案有哪些

今天小编给大家分享一下PHP session共享的解决方案有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。先了解一下为什
2023-07-04

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

这篇文章主要介绍“redis实现session共享的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“redis实现session共享的方法是什么”文章能帮助大家解决问题。引言大厂很多项目都是
2023-07-06

PHP Session 跨域问题的解决方法

在前后端分离的开发中,跨域请求已成为常态。在处理跨域问题时,我们通常会涉及到 session 的使用和管理。然而,由于浏览器的同源策略限制,跨域情况下默认情况下无法共享 session。为了解决这个问题,我们需要采用一些技巧和方法来实现 s
2023-10-21

Redis解决跨域存取Session问题

目录前言一、遇到的情况二、解决问题2.1 配置yml文件2.2 启动Redis2.3 代码编写三、效果演示总结前言vue3+SpringBoot做项目时,由于vue前端项目是在8080端口运行,而后端项目是在8081端口运行,前端通过跨域
2023-04-12

Ubuntu和windows文件共享问题详解

Ubuntu和Windows文件共享问题 ubuntu访问windows共享文件夹(ubuntu桌面系统): 最简单的方法,随便打开一个文件编程客栈夹,按Ctrl+L,然后地址栏敲smb://xxx.xxx.xxx.xxx(windows主
2023-05-26

解决Linux system v 共享内存问题

system v 共享内存#include #include int shmget(key_t key, size_t size, int shmflg);建立:进程与共享内存的关联关系
2022-06-04

win7共享文件夹无法访问解决方法

在win7系统软件开展共享文件夹浏览的情况下,有一部分客户被阻拦了,发生了无法访问的问题,因此大家提供了解决方法,下边就一起来看看win7共享文件夹无法访问解决方法吧。win7共享文件夹无法访问:1、最先右键桌面上此电脑,随后点击“属性”。
2023-07-10

在SpringBoot中怎么使用Spring Session解决分布式会话共享问题

本篇内容介绍了“在SpringBoot中怎么使用Spring Session解决分布式会话共享问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
2023-06-16

如何解决Win7共享文件无法保存的问题

我们经常使用共享文件夹来帮助我们传输文件,但是有朋友说设置共享文件后无法保存,那么遇到这种情况该怎么办呢?以下就和小编一起来看看有哪些解决方案。如何解决Win7共享文件无法保存的问题首先,我们找到需要共享的文件,右键打开选择属性。二、点击上
2023-07-10

编程热搜

目录