Spring-Session 提供API和实现实现类,用于管理用户Session会话(官方)
关于它的特性,模块就参考官网,我就不照本宣科咯.
为什么是SpringSession
随着分布式架构和集群等架构的主流化,就带了session共享问题.Spring-Session它像Spring家族的其他组件一样,它的出现是为了指定标准,说白了就是在企业开发中,我提供框架,接口,流程规范.这里可见Spring的野心之大.
我们知道解决session共享问题有很多方案,比如常见的
- redis共享
- url带参
- mysql建表保存
等等,反正道路千千万万,都能解决这个问题.
PS:那要个篮子的spring-session .我用redis解决就完事了,干嘛要劳什子学习啥spring-session 的 api.我干嘛要学这种鸡肋的技术嘛.
话糙理不糙,没毛病,的确如此.我也是这么觉得.那么本文到此嗝屁.
实际上,不是这样,所有的spring组件都可以如下解释:
- 支持Redis、Database、MogonDB等方案可以避免重复造轮子,少踩一些坑
- 代码都是spring的风格,可读性大大提高
- 即使出了问题,百度就能搞懂(嘿嘿...专业百度选手)
- 遵顼JSR340规范,设计更加合理,维护性大大提高
- spring-session的优势在于开箱即用,具有较强的设计模式。
- 且支持多种持久化方式,其中RedisSession较为成熟,与spring-data-redis整合
好了,官方的话不多说,mmp还是要学啊,文规定题.
spring-session的核心思想
将session从web容器中剥离,存储在独立的存储服务器中。
目前支持多种形式的session存储器:Redis、Database、MogonDB等。session的管理责任委托给spring-session承担。
当request进入web容器,根据request获取session时,由spring-session负责存存储器中获取session,如果存在则返回,如果不存在则创建并持久化至存储器中。
用起来
redis 作为存储器试试水,springboot 项目
引入jar
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
配置
# 选择redis作为存储器
spring.session.store-type=redis
# 超时10s
server.servlet.session.timeout= 10
# Sessions flush mode.
spring.session.redis.flush-mode=on_save
# Namespace for keys used to store sessions.
spring.session.redis.namespace=spring:session
# redis的配置
spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.port=6379 # Redis server port.
启动
就能用起来,这个demo参考
源码
这里就不分析了.开箱即用的成熟产品,用起来吧.就不要去琢磨源码了,没啥太大味道.
如果你非要琢磨,我就给大家几个点,看看参考下:
- 包spring-session @EnableSpringHttpSession @EnableRedisHttpSession @EnableMongoHttpSession 随便找一个试着看看就明白了.
还是熟悉的spring代码风格.没太深逻辑.