zoukankan      html  css  js  c++  java
  • [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代码风格.没太深逻辑.

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

  • 相关阅读:
    【抓包知识】01_tcpdump安装及使用
    【jmeter知识】03_jmeter接口报Read timed out +ng日志499分析
    【nginx知识】01_nginx日志请求到达时间$time_local、请求处理时间request_time
    【研发过程质量分析可视化】剩余需求实现(数据处理、数据可视化)
    【研发过程质量分析可视化】需求1(获取待分析缺陷清单)实现
    【研发过程质量分析可视化】需求文档
    【jmeter知识】01_接口响应时间(Connect Time、Latency、Sample Time)
    【python解题笔记20210318】CodeWars:RGB To Hex Conversion
    生成MD5加密
    StringBuilder--拼接Sql语句防Sql注入
  • 原文地址:https://www.cnblogs.com/Profound/p/13100124.html
Copyright © 2011-2022 走看看