广告
返回顶部
首页 > 资讯 > 数据库 >Redis解决Session共享问题的方法详解
  • 522
分享到

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

Redis解决Session共享Redis Session共享 2022-07-11 11:07:16 522人浏览 安东尼
摘要

企业项目中,一般都是将项目部署到多台服务器上,用Nginx做负载均衡。这样可以减轻单台服务器的压力,不过这样也带来一些问题,例如之前单机部署的话,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共享的资料请关注我们其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Redis解决Session共享问题的方法详解

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

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

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

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

下载Word文档
猜你喜欢
  • Redis解决Session共享问题的方法详解
    企业项目中,一般都是将项目部署到多台服务器上,用nginx做负载均衡。这样可以减轻单台服务器的压力,不过这样也带来一些问题,例如之前单机部署的话,session存取都是直接了当的,因为请求就只到这一台服务器上,不需要考虑...
    99+
    2022-07-11
    Redis解决Session共享 Redis Session共享
  • Spring Session和Redis解决分布式Session跨域共享问题是什么
    本篇文章给大家分享的是有关Spring Session和Redis解决分布式Session跨域共享问题是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一...
    99+
    2022-10-18
  • redis实现session共享的方法
    目录引言案例介绍具体操作引言 大厂很多项目都是部署到多台服务器上,这些服务器在各个地区都存在,当我们访问服务时虽然执行的是同一个服务,但是可能是不同服务器运行的; 在我学习项目时遇到这样一个登录情景,假设有如下三台服务器...
    99+
    2023-04-14
    redis session共享 Redis共享 Session
  • 利用Spring Session和redis对Session进行共享详解
    前言我们在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。session的处理有很多种方法,详情见转载的上篇博客:集群/分布式环境下5种session处理策略在这里我们讨论其中的第三种方法:session共享...
    99+
    2023-05-31
    spring session共享 redis
  • Spring Boot/Spring Session/Redis的分布式Session共享如何解决
    本篇文章为大家展示了Spring Boot/Spring Session/Redis的分布式Session共享如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。分布式Web网站一般都会碰到集群s...
    99+
    2023-05-31
    springboot spring session redis
  • android与asp.net服务端共享session的方法详解
    前言最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需要在android客户...
    99+
    2023-05-30
    android session共享 asp.net
  • PHP session共享的解决方案有哪些
    今天小编给大家分享一下PHP session共享的解决方案有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。先了解一下为什...
    99+
    2023-07-04
  • redis实现session共享的方法是什么
    这篇文章主要介绍“redis实现session共享的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“redis实现session共享的方法是什么”文章能帮助大家解决问题。引言大厂很多项目都是...
    99+
    2023-07-06
  • PHP Session 跨域问题的解决方法
    在前后端分离的开发中,跨域请求已成为常态。在处理跨域问题时,我们通常会涉及到 session 的使用和管理。然而,由于浏览器的同源策略限制,跨域情况下默认情况下无法共享 session。为了解决这个问题,我们需要采用一些技巧和方法来实现 s...
    99+
    2023-10-21
    PHP session 跨域
  • Redis解决跨域存取Session问题
    目录前言一、遇到的情况二、解决问题2.1 配置yml文件2.2 启动Redis2.3 代码编写三、效果演示总结前言 vue3+SpringBoot做项目时,由于vue前端项目是在8080端口运行,而后端项目是在8081端...
    99+
    2023-04-12
    Redis跨域存取Session Redis 存取Session
  • Ubuntu和windows文件共享问题详解
    Ubuntu和Windows文件共享问题 ubuntu访问windows共享文件夹(ubuntu桌面系统): 最简单的方法,随便打开一个文件 www.jb51.net sudo apt-get install samba...
    99+
    2023-05-26
    Ubuntu和windows文件共享问题 文件共享 问题 windows Ubuntu
  • 如何运用PHP+REDIS解决负载均衡后的session共享
    一、为什么要使用Session共享? 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个模...
    99+
    2022-10-18
  • 解决Linux system v 共享内存问题
    system v 共享内存 #include <sys/types.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int...
    99+
    2022-06-04
    Linux system v 共享内存 Linux 共享内存
  • Golang共享变量如何解决问题
    目录1. 什么是竞态 2. 如何消除竞态 3. Go 提供的并发工具 3.1 互斥锁 3.2 读写互斥锁 3.3 Once 3.4 竞态检测器 4. 小结 在之前的文章中,我们详细说...
    99+
    2022-11-12
  • win7共享文件夹无法访问解决方法
    在win7系统软件开展共享文件夹浏览的情况下,有一部分客户被阻拦了,发生了无法访问的问题,因此大家提供了解决方法,下边就一起来看看win7共享文件夹无法访问解决方法吧。win7共享文件夹无法访问:最先右键桌面上此电脑,随后点击“属性”。随后...
    99+
    2023-07-10
  • redis中热key问题的解决方法
    这篇文章主要介绍了redis中热key问题的解决方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。正文热Key问题上面提到,所谓热key问题...
    99+
    2022-10-18
  • 一起聊聊PHP session共享的四种解决方案
    本文给大家介绍PHP session相关知识,下面带大家先从为什么会出现这种session共享的解决方案开始了解,希望对需要的朋友有所帮助~先了解一下为什么会出现这种session共享的解决方案?随着互联网公司的项目在微服务和分布式的环境下...
    99+
    2023-05-14
    php session
  • 如何解决Win7共享文件无法保存的问题
    我们经常使用共享文件夹来帮助我们传输文件,但是有朋友说设置共享文件后无法保存,那么遇到这种情况该怎么办呢?以下就和小编一起来看看有哪些解决方案。如何解决Win7共享文件无法保存的问题首先,我们找到需要共享的文件,右键打开选择属性。二、点击上...
    99+
    2023-07-10
  • 解决vmware上Ubuntu共享文件夹的问题
    目录解决vmware上ubuntu无法共享文件夹问题第一步:设置共享文件夹第二步:安装open-vm-tools第三步:挂载文件夹先查看设置的文件夹有没有起效创建目录并挂载手动挂载/自动挂载最后保存退出(先别走!)解决vmware上ubun...
    99+
    2022-09-23
  • 如何解决win7无法访问windows 2003共享文件的问题
      win7无法访问Windows 2003共享文件,但windows2003可以访问该win7系统,   win7之间也可以相互访问,查来查去原来是本地策略问题。   解决方法: &nbs...
    99+
    2023-05-26
    win7 windows2003 文件 windows 2003 问题 共享
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作