大家好,欢迎来到IT知识分享网。
常⻅的会话解决⽅案
- 粘性会话 Sticky Session ,负载均衡实现,让一个用户的请求尽可能落在一个服务器上。但是当这台服务器下线的时候,就有可能发生问题(用户的session没有了,影响体验)
- 会话复制 Session Replication ,把每台机器上的一个会话都做一个复制。session的复制是有成本的,并且当访问量大的时候也会加剧服务端压力,同步延时的问题。
- 集中会话 Centralized Session
认识 Spring Session
Spring Session
- 简化集群中的⽤户会话管理
- ⽆需绑定容器特定解决⽅案
⽀持的存储
- Redis
- MongoDB
- JDBC
- Hazelcast
实现原理
定制 HttpSession
通过定制的 HttpServletRequest 返回定制的 HttpSession
- SessionRepositoryRequestWrapper
- SessionRepositoryFilter
- DelegatingFilterProxy
基于 Redis 的 HttpSession
引⼊依赖
- spring-session-data-redis
基本配置
- @EnableRedisHttpSession
- 提供 RedisConnectionFactory
- 实现 AbstractHttpSessionApplicationInitializer
- 配置 DelegatingFilterProxy
Spring Boot 对 Spring Session 的⽀持
application.properties
- spring.session.store-type=redis
- spring.session.timeout=
- server.servlet.session.timeout=
- spring.session.redis.flush-mode=on-save
- spring.session.redis.namespace=spring:session
SpringSession
Spring Boot为广泛的数据存储提供Spring Session自动配置。在构建servlet web应用程序时,可以自动配置以下存储:
- JDBC
- Redis
- Hazelcast
- MongoDB
此外,Spring Boot for Apache Geode提供了 auto-configuration for using Apache Geode as a session store。
servlet自动配置取代了使用@Enable*HttpSession的需要。
在构建响应式web应用程序时,可以自动配置以下存储:
- Redis
- MongoDB
响应式自动配置取代了使用@Enable*WebSession的需要。
如果类路径上存在一个Spring Session模块,Spring Boot会自动使用该存储实现。如果有多个实现,则必须选择希望用于存储会话的StoreType。例如,要使用JDBC作为后端存储,您可以如下配置您的应用程序:
spring.session.store-type=jdbc
你可以通过设置store类型为none来禁用Spring Session。
每个存储都有特定的附加设置。例如,可以为JDBC存储自定义表的名称,如下面的示例所示:
spring.session.jdbc.table-name=SESSIONS
要设置会话的超时时间,你可以使用spring.session.timeout属性。如果没有使用servlet web应用程序设置该属性,自动配置将退回到server.servlet.session.timeout的值。
您可以使用@Enable*HttpSession (servlet)或@Enable*WebSession(响应式)来控制Spring Session的配置。这将导致自动配置退出。然后可以使用注解的属性而不是前面描述的配置属性来配置Spring Session。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/86895.html