前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【springboot】 spring session 分布式会话共享

【springboot】 spring session 分布式会话共享

作者头像
冷冷
发布2018-02-08 12:56:48
9960
发布2018-02-08 12:56:48
举报
文章被收录于专栏:冷冷冷冷
设计拓扑图
设计拓扑图

前言

如上图,是一个非常传统的服务端拓扑结构,一个web请求,经过负载均衡的转发,到不同的服务器处理。那么来自同一用户的请求将有可能被负载分发到不同的实例中去,如何保证不同实例间Session共享成为一个不得不解决的问题。 Spring Session作为Spring社区官方推荐的一个比较简单快速的Java Web分布式session解决方案,帮我们搞定了长期以来比较蛋疼的session分布式的问题。

搭建spring boot整合spring session

1. 加入Redis和spring-session的依赖

代码语言:javascript
复制
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session</artifactId>
</dependency>

2. application配置

代码语言:javascript
复制
spring:
  session:
    store-type: redis

。。。到这里就配置完毕了,如果你的redis 不是默认配置,还要配置一下redis咯,当然spring-session 也支持更多的存储方式,具体参考文档

3. 配置nginx.conf

代码语言:javascript
复制
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

	upstream spring-session {
		server 127.0.0.1:8081; 
		server 127.0.0.1:8082; 
		server 127.0.0.1:8083;
	}
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://spring-session;
			proxy_set_header Host $host; 
			proxy_set_header X-Real-IP $remote_addr; 
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        }
    }
}

3. 体验一下所谓的分布式会话共享

代码语言:javascript
复制
java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8081

java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8082

java -jar ./springboot-session-0.0.1-SNAPSHOT.jar --spring.profiles.active=8083
负载均衡下的session
负载均衡下的session

注意看动图路由到不同服务后SessionID 情况

负载均衡下的session
负载均衡下的session

会发现,无论转发到那个节点处理SessionId 不会变化。

4. 最后来看看Session在Redis里面数据结构

image
image

配置过程一些坑

配置Nginx的时候,注意要注释ip_hash,不然通一个IP的请求,会被转发到通一个服务里面。

代码语言:javascript
复制
upstream spring-session {
    # ip_hash
	server 127.0.0.1:8081; 
	server 127.0.0.1:8082; 
	server 127.0.0.1:8083;
}

源码

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 搭建spring boot整合spring session
    • 1. 加入Redis和spring-session的依赖
      • 2. application配置
        • 3. 配置nginx.conf
          • 3. 体验一下所谓的分布式会话共享
            • 4. 最后来看看Session在Redis里面数据结构
              • 配置过程一些坑
                • 源码
                相关产品与服务
                云数据库 Redis
                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档