[spring家族01]之Spring-Session

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代码风格.没太深逻辑.

再参考下一个大佬的精彩分析

posted @ 2020-06-12 16:17  谢幕ゾ华丽  阅读(155)  评论(0编辑  收藏  举报