分布式Session解决方案

*★如果文章对你有帮助【关注点赞❤️收藏⭐】一起努力!★*

‍ 个人主页:花棉袄

本章内容:【分布式Session解决方案
✍ 版权: 本文由【花棉袄】原创在CSDN首发需要转载请联系博主

分布式session

session 原理

分布式Session解决方案_第1张图片

  • session存储在服务端,jsessionId存在客户端,每次通过jsessionid取出保存的数据
  • 问题:但是正常情况下session不可跨域(不能跨域共享),它有自己的作用范围

分布式Session解决方案_第2张图片

解决方案

  • session要能在不同服务和同服务的集群的共享
    分布式Session解决方案_第3张图片

1️⃣session复制

  • 用户登录后得到session后,服务把session也复制到别的机器上,显然这种处理很不好

分布式Session解决方案_第4张图片

2️⃣hash一致性

  • 根据用户,到指定的机器上登录,但是远程调用还是不好解决
    分布式Session解决方案_第5张图片

3️⃣redis统一存储

  • 最终的选择方案,把session放到redis中

分布式Session解决方案_第6张图片

4️⃣SpringSession整合redis

  • 通过SpringSession修改session的作用域

导入依赖

  <dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
  </dependency>

配置SpringSession

spring.session.store-type=redis
server.servlet.session.timeout=30m
spring.redis.host=********

启动类添加注解

@EnableRedisHttpSession

配置文件:MySessionConfig

  • 自定义 SpringSession 完成 Session 子域共享
@Component
public class MySessionConfig {
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        cookieSerializer.setDomainName("session.com");// 放大作用域
        cookieSerializer.setCookieName("SESSION");
        cookieSerializer.setCookieMaxAge(60 * 60 * 24 * 7);// 指定cookie有效期7天,会话级关闭浏览器后cookie即失效
        return cookieSerializer;
    }

    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        // 指定session序列化到redis的序列化器
        // return new Jackson2JsonRedisSerializer(Object.class);// 无法保存对象类型,反序列化后默认使用Map封装
        return new GenericJackson2JsonRedisSerializer();
    }
}

登录接口

分布式Session解决方案_第7张图片

*★如果文章对你有帮助【关注点赞❤️收藏⭐】一起努力!★*

在这里插入图片描述
在这里插入图片描述

全栈小狐狸的逆袭之路:Java学习路线
往期文章:后端开发宝典

你可能感兴趣的:(#,后端开发宝典,分布式,redis,java)