Spring Session介绍

news2024/11/16 17:56:21

    • Spring Session
    • Session储存到Redis
      • 1:添加依赖
      • 2:配置信息
      • 3:Spring Session存String
      • 3:Spring Session存对象
    • 项目改造-Redis储存Session

Spring Session

Spring Session储存在Redis和取的执行流程:
1:request.getSession() 方法时,Servlet 容器会创建一个 HttpSession 对象,并返回给你。然后,Spring Session 进行拦截和包装,使用动态代理生成一个代理对象,该代理对象实现了 HttpSession 接口。
2:调用 httpSession.setAttribute() 方法设置属性值时,代理对象会拦截这个操作;将数据存储到 Redis 中以进行持久化保存。
3:调用 httpSession.getAttribute() 方法获取属性值时,代理对象会拦截这个操作;从 Redis 中检索数据,并返回给你。

Session session = request.getSession(); // 创建或获取会话;你配置储存在Redis;就会通过代理对象外部储存和取。通过动态代理的方式;当需要集成这个功能时;代码都不需要修改;你只需要添加配置即可
//有点区别:session.getAttribute在Spring Session返回的是你存的具体对象类型。而HttpSession的session.getAttribute返回的是Object类型

Spring Session相比于HttpSession有什么优势?
1:分布式会话管理;Spring Session 允许将会话数据存储在外部存储系统中,例如 Redis。
2:灵活的会话超时配置; Spring Session 允许灵活地配置会话的超时时间,而不仅仅依赖于容器或应用服务器的默认配置。

Session储存到Redis

1:添加依赖

<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
			<!--SessionRedis;已经包含 Redis 客户端框架-->
</dependency>

2:配置信息

#配置Session存在redis;而不是内存
spring.session.store-type=redis
#on_save 表示在保存(或更新)会话时,才会将会话的改变写入到Redis。
spring.session.redis.flush-mode=on_save
#会话的超时时间设置为1800秒,30分钟。
server.servlet.session.timeout=1800
#数据库名中命名层级
spring.session.redis.namespace=spring:session

3:Spring Session存String

@RestController
 class UserCOntroller{
    private static final String Session_key="User_key";
    @RequestMapping("/loginset")
    public String loginset(HttpServletRequest request){

        HttpSession httpSession=request.getSession();
        httpSession.setAttribute(Session_key,"zhangsan");
        String s=(String) httpSession.getAttribute(Session_key);
        return s;
    }

    @RequestMapping("/loginget")
    public String loginget(HttpServletRequest request){
        HttpSession httpSession=request.getSession(false);
        String s=(String) httpSession.getAttribute(Session_key);
        return s;
    }
}

在这里插入图片描述
验证获取时是否成Redis获取:
在这里插入图片描述

3:Spring Session存对象

如果直接存的话是会报错的:
在这里插入图片描述
Redis 存储的数据都是以二进制数组形存在的。当我们在使用 RedisTemplate 这些Redis 客户端操作 Redis ,需要将数据序列化成二进制数组。
为什么Redis要是储存字节的形式:
1:数据持久化;防止丢失;需要将数据序列化为字节流,以便将其写入持久化文件,然后在重新加载时将其反序列化为对象。
2:网络传输;我们远程连接Redis是要通过网络连接;那么网络传输;字节流就是一个好的方式。
3:多语言支持;字节流就能适用于不同的编程语言的各种类型和对象
4:储存优化;字节流的储存更紧凑;能节省更多内存。内存相对硬盘比较贵。

Java 中的基本数据类型,它们都有默认的序列化方式可以通过实现 Serializable 接口来自定义序列化方式。而自定义类型;你得你对象拥有序列化和反序列能力。在对象上实现Serializable接口。
在这里插入图片描述

如果不想序列化;加transient把它排除掉;就没法存进去的;序列化把这个忽略了。
在这里插入图片描述

项目改造-Redis储存Session

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软 Power Platform 零基础 Power Pages 网页搭建实际案例实践(三)

微软 Power Platform 零基础 Power Pages 网页搭建教程之案例实践学习&#xff08;三&#xff09;结合Power Apps和Power Automate Power Pages 实际案例学习 微软 Power Platform 零基础 Power Pages 网页搭建教程之案例实践学习&#xff08;三&#xff09;结合Power Apps和Po…

AWS攻略——VPC初识

大纲 在网络里启动一台可以ssh上去的机器查看区域、VPC和子网创建EC2连接Web端连接客户端连接 知识点参考资料 VPC是在AWS架构服务的基础&#xff0c;有点类似于我们在机房里拉网线和设置路由器等。等这些设施完备后&#xff0c;我们才能考虑给机器部署服务。而很多初识AWS的同…

字节跳动小游戏SDK接入

1.分包加载报错&#xff1a;去掉game.json中分包加载的部分 2. JSON格式问题&#xff1a;解决办法&#xff1a; 3.解决办法&#xff1a;点开详情&#xff0c;在ES6转Es5把打钩去掉 4.视频广告无法加载的问题&#xff1a; 开发者工具上无法进行视频广告调试&#xff1b;必须在真…

根文件系统初步测试

一. 简介 上一篇文章学习了向所编译生成的根文件系统中加入 lib库文件。文章地址如下&#xff1a; 根文件系统lib库添加与初步测试-CSDN博客 本文继上一篇文章的学习&#xff0c;本文对之前制作的根文件系统进行一次初步测试。 二. 根文件系统初步测试 为了方便测试&#…

【PyTorch】多层感知机

文章目录 1. 模型和代码实现1.1. 模型1.1.1. 背景1.1.2. 多层感知机1.1.3. 激活函数 1.2. 代码实现1.2.1. 完整代码1.2.2. 输出结果 2. Q&A 1. 模型和代码实现 1.1. 模型 1.1.1. 背景 许多问题要使用线性模型&#xff0c;但无法简单地通过预处理来实现。此时我们可以通过…

ElasticSearch基础知识

ElasticSearch是一个高扩展的分布式全文搜索引擎&#xff0c;基于Lucene作为核心实现所有索引和搜索的功能。 使用场景&#xff1a; &#xff08;1&#xff09;搜索领域&#xff1a;如维基百科、谷歌&#xff0c;全文检索等。 &#xff08;2&#xff09;网站具体内容&#xf…

计算机网络:传输层——多路复用与解复用

文章目录 前言一、Socket&#xff08;套接字&#xff09;二、多路复用/解复用三、多路解复用&#xff08;1&#xff09;多路解复用原理&#xff08;2&#xff09;无连接&#xff08;UDP&#xff09;多路解复用&#xff08;3&#xff09;面向连接&#xff08;TCP&#xff09;的多…

普通策略梯度算法原理及PyTorch实现【VPG】

有没有想过强化学习 (RL) 是如何工作的&#xff1f; 在本文中&#xff0c;我们将从头开始构建最简单的强化学习形式之一 —普通策略梯度&#xff08;VPG&#xff09;算法。 然后&#xff0c;我们将训练它完成著名的 CartPole 挑战 — 学习从左向右移动购物车以平衡杆子。 在此…

哈希与哈希表

哈希表的概念 哈希表又名散列表&#xff0c;官话一点讲就是&#xff1a; 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据关键码值(Key value)而直接进行访问的数据结构。也就是说&#xff0c;它通过把关键码值映射到表中一个位置来访问记…

MySQL的多表查询

多表关系 一对多(多对一)-> 多对多-> 一对一-> 概述 概述 多表查询分类 内连接 代码演示--> -- 内连接演示 -- 1.查询每一个员工的姓名&#xff0c;及关联的部门的名称(隐式内连接实现) select emp.name, dept.name from emp,dept where emp.dept_id dept.id; …

10、外观模式(Facade Pattern,不常用)

外观模式&#xff08;Facade Pattern&#xff09;也叫作门面模式&#xff0c;通过一个门面&#xff08;Facade&#xff09;向客户端提供一个访问系统的统一接口&#xff0c;客户端无须关心和知晓系统内部各子模块&#xff08;系统&#xff09;之间的复杂关系&#xff0c;其主要…

sql面试题之“互相关注的人”(方法三)

题目&#xff1a;某社交平台有关注这个功能&#xff0c;关注的同时也会被关注。现有需求需要找出平台上哪些用户之间互相关注。 文章目录 题目如下&#xff1a;一、数据准备二、建表并导入数据1.建表2.导入数据3.数据分析和实现思路小结&#xff1a; 题目如下&#xff1a; 某社…

[RK-Linux] 移植Linux-5.10到RK3399(三)| 检查eMMC与SD卡配置

这个专题主要记录把 RK Linux-5.10 移植到 ROC-RK3399-PC Pro 的过程。 文章目录 一、eMMC二、SD 卡三、两个接口的区别一、eMMC RK3399 的 eMMC 接口如图: datasheet 介绍: 实际上,连接 eMMC 存储器用的是 SDHCI 接口。SDHCI(Secure Digital Host Controller Interface)…

【数据结构】最短路径——Floyd算法

一.问题描述 给定带权有向图G&#xff08;V&#xff0c;E&#xff09;&#xff0c;对任意顶点 V &#xff08;ij)&#xff0c;求顶点到顶点的最短路径。 转化为&#xff1a; 多源点最短路径求解问题 解决方案一&#xff1a; 每次以一个顶点为源点调用Dijksra算法。时间复杂…

香港虚拟信用卡如何办理,支持香港apple id

什么是虚拟信用卡&#xff1f; 虚拟信用卡&#xff0c;英文称之为Virtual Credit Card Numbers&#xff0c;就是指没有实体卡片&#xff0c;是基于银行卡上面的BIN码所生成的虚拟账号。通常用于进行网络交易&#xff0c;使用起来很方便&#xff0c;也很安全。 它与实体信用卡…

算法-01-递归

1-理解递归 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列 &#xff0c;以兔子繁殖为例子而引入&#xff0c;故又称“兔子数列”&#xff0c;其数值为&#xff1a;1、1、2、3、5、8、13、21、34……特点是 从第三个数开始&#xff0c;第…

HOST文件被挟持,无法上网,如何解决。

问题&#xff1a; 晚上开机&#xff0c;突然发现无法联网&#xff0c;提示网络异常 解决&#xff1a; 首先网络诊断&#xff0c;host文件被劫持&#xff0c;修复后&#xff0c;仍然不行。 然后测试手机热点&#xff0c;发现仍然无法联网 尝试用火绒修复&#xff0c;无果。 所有…

Linux Camera Driver(2):CIS设备注册(DTS)

一:MIPI接口 1、硬件接口 MIPI接口以rv1109和gc2053的硬件为例进行说明: 2、ISP驱动 注意配置事项: endpoint配置,必须指定data-lanes,否则无法识别为mipi类型 链接方式:sensor->csi_dphy->isp->ispp (1)sensor节点配置 根据原理图可知:mipicsi_clk0即引…

Linux系统安装Python3环境

1、默认情况下&#xff0c;Linux会自带安装Python&#xff0c;可以运行python --version命令查看&#xff0c;如图&#xff1a; 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了&#xff08;CtrlD退出python命令窗口&#xff09;。 2…

STM32F407-14.3.11-01互补输出和死区插入

互补输出和死区插入 高级控制定时器&#xff08;TIM1 和 TIM8&#xff09;可以输出两路互补信号&#xff0c;并管理输出的关断与接通瞬间。 这段时间通常称为死区&#xff0c;用户必须根据与输出相连接的器件及其特性&#xff08;电平转换器的固有延迟、开关器件产生的延迟...&…