• Redis(三)session共享


    前置:使用session共享的原因

    项目部署在服务器上面之后,发现项目流量太大,一个服务器扛不住,所以现在想给他部署到两个服务器上去,如下图方式
    在这里插入图片描述
    这样部署你的服务器就会出现问题,当你的服务器想要去登录的时候,
    就会出现问题,(jwt天然不存在这种问题),问题描述如下图

    (虽然是三个不同的服务器,但是因为我们的项目是集群部署的,所以三个服务器上面跑的代码是一模一样的。)

    问题:因为是集群部署的,虽然服务器是三个不同的服务器,但是上面跑动的代码都是相同的,所以登录的话要三个一起登录,但是用户的请求第一次发送到tomcat1上,然后完成了登录,而把我们的用户信息保存在了session中。然后过了一段时间,用户又要进行第二次登录,但是这次用户在tomcat3进行登录,tomcat3上面就么有这个用户的信息,故此用户又需要重新登录一次,这样显然是不合理的。

    我们的希望:当我们的项目集群化部署的时候能够解决我们上面的问题。而上面的问题解决办法有很多种,例如我们在上面提到的jwt天然就已经解决了这个问题了。今天我们提到的解决办法就是Seeion共享

    session共享解决问题核心思想 :让这三个tomcat使用同一个session,这样当我们用户第一次登录的时候,我们想要存数据,正常数据数据存入到tomcat1中,我们的系统会自动的帮我们把数据存入到redis服务器中理论,当你说。
    主流登录:jwt /session共享
    在这里插入图片描述

    案例:

    在这里插入图片描述

    1.依赖

    在这里插入图片描述

    2: 配置application.properties

    spring.redis.host=1.12.235.192 
    spring.redis.password=123
    spring.redis.port=6379
    #因为我们等下要用到端口号,所以就算我们这里是默认的8080但是我们还是要把他写出来,
    #此处与后面配置有关
    server.port=8080
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:application虽然默认有tomcat8080端口,但是还是要配置8080端口的原因是,我们需要在controller层往spring容器中注入8080端口,但是8080端口里是没有这些东西的,如果我们不添加8080端口的话,就什么都注入不进来。

    HelloController

    @RestController
    public class HelloController {
    
        //但是我们spring容器里面没有server.port选项的,
        //所以,如果我们application不加8080端口的配置,就什么都注入不进来。
        @Value("${server.port}")
        Integer port;
    
    
    
        @GetMapping("/set")
        public String set(HttpSession session){
            session.setAttribute("name","zhangsan");
            return  String.valueOf(port);
        }
    
        @GetMapping("/get")
        public String get(HttpSession session){
            return(String) session.getAttribute("name")+">>>"+port;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3.运行一下你的idear项目看看是否可以运行

    如果可以运行打成jar包

    在这里插入图片描述

    4.把包放入你的linux中

    运行下面一行代码
    nohup java -jar huang-0.0.1-SNAPSHOT.jar --server.port=8084> 8084.log &
    在这里插入图片描述

    5.访问

    在这里插入图片描述

    在这里插入图片描述

    可以发现这两个ip共享同一个session,但是对于用户来说,用户在访问ip地址的时候不可能直接拿着两个ip地址去访问两台记机器
    那么我们该如何去优化它呢?

    6. 如何优化

    我们一般在共享session的服务器前加一个nginx服务器
    称为:反向代理服务器或者负载均衡服务器
    在这里插入图片描述
    他的作用是,当请求到达nginx之后,由nginx帮你自动的分发
    到不同的tomcat上面去,对于用户来说,用户只要记得nginx地址就可了。

    负载均衡:当请求到达了服务器之后,服务器根据提前配置好的策略,把请求给转发到不同的服务器上面去。
    反向代理: 因为代理的是被访问者,所以叫反向代理。

    在这里插入图片描述

    正向代理:翻墙所用的梯子,因为梯子代理的是访问者
    在这里插入图片描述

    总结:

    逻辑步骤:

    1.idear写好后启动是否能访问网站
    2.打成jar包
    3.jar包放入linux中
    4.linux中分别访问两个ip
    5.配置nginx

  • 相关阅读:
    adb 获取 Android 设备中已安装的 apk 文件
    PaddleSeg数据集的准备
    services.Jenkins Additional property tags is not allowed
    嵌入式学习记录6.14(练习)
    RISC-V基础编译
    七大常见基于比较的排序算法
    C++数据结构X篇_12_树的基本概念和存储
    mysql忘记密码
    js中,sort()方法排序的4种写法-是否传参、是否多个属性值排序——array.sort(function(a,b))-a元素在前之a-b升序、b-a降序
    概率论介绍
  • 原文地址:https://blog.csdn.net/weixin_43189971/article/details/126175635