为什么用ThreadLocalMap而不使用Session
数据隔离与线程安全
ThreadLocalMap:它为每个线程提供独立的存储空间,确保不同线程间的数据相互隔离,避免了多线程环境下的并发访问问题,无需额外的同步操作就能保证线程安全。比如在处理多个用户的并发请求时,每个线程可以在自己的 ThreadLocalMap 中安全地存储和访问用户相关信息,不会出现数据混乱。
Session:通常用于在 Web 应用中跨页面或跨请求跟踪用户会话信息。它是基于客户端的会话标识(如 Session ID)来存储和获取数据的,在多线程环境下,如果多个线程同时访问和修改同一个 Session 对象,可能会引发数据不一致的问题,需要通过同步机制来保证线程安全,这增加了编程的复杂性。
作用域和生命周期
ThreadLocalMap:其生命周期与线程绑定,当线程执行完毕,ThreadLocalMap 及其存储的内容会随着线程的结束而被销毁,自动释放资源。它适用于在单个线程内传递和使用数据,比如在一次请求处理的过程中,从登录验证到后续的业务逻辑处理,在不同的方法和类之间传递用户信息,ThreadLocalMap 能很好地满足这种需求。
Session:的生命周期通常与用户的会话相关,从用户登录到注销或会话超时为止。它在整个会话期间都存在,即使在一段时间内没有任何请求,Session 也会占用服务器内存资源。如果并发用户数量较多,可能会导致服务器内存占用过高。而且,如果在一个请求处理过程中开启了多个线程,Session 在不同线程之间共享,可能会出现数据不一致的情况,因为 Session 并不保证在多线程环境下的原子性和线程安全。
性能和资源消耗
ThreadLocalMap:由于数据存储在当前线程的本地内存中,访问速度快,不存在网络传输或跨进程通信的开销。在处理大量并发请求时,能有效减少内存占用和提高系统性能。
Session:数据通常存储在服务器端的内存或数据库中,每次访问 Session 都需要进行一定的查找和读取操作,可能涉及到数据库查询或内存查找,这会带来一定的性能开销。特别是在高并发场景下,对 Session 的频繁访问可能会成为系统性能的瓶颈。
适用场景
ThreadLocalMap:适用于在单个线程内进行数据传递和共享的场景,如在 Web 应用中,从过滤器到 Servlet,再到业务逻辑层之间传递用户登录信息、请求上下文等。它能保证数据在同一线程内的一致性和独立性。
Session:适用于在多个页面或请求之间共享用户相关的状态信息,如用户购物车信息、登录状态等。但对于在多线程环境下需要严格保证数据隔离和线程安全的场景,Session 并不是最佳选择。
为什么用ThreadLocalMap而不使用Session的更多相关文章
- 关于session和token
最近做的项目是全平台的,需要给移动端做后台,有了许多改变,如是使用token而不是session.一开始我无法理解为什么不用session,看了很多文章以后才有一定了解. 例如在ios端, ...
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
在某国外大型汽车公司BI项目中,有一个子项目,需要通过大屏幕展示销售报表,程序需要自动启动和关闭.开发人员在开发过程中,发现在Win7的service中不能直接操作UI进程,调查过程中,发现如 ...
- [转]解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分.我们可以把服务想像成一种特殊的应用程序,它随系统的“开启-关闭”而“开始-停止”其工作内容,在这期间无需任何 ...
- Session invalidate
会清空所有已定义的session 而不是清空全部session的值也就是说 定义了一个名为 user 的session 调用invalidate()方法后使用Session.getValue(“use ...
- session与缓存
分布式系统开发常见问题-1. session的复制与共享 2. 分布式缓存的设计 1. session的复制与共享 在web应用中,为了应对大规模访问,必须实现应用的集群部署.要实现集群部署主要需要实 ...
- Tomcat的SessionID引起的Session Fixation和Session Hijacking问题
上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hi ...
- Consul Session
consul馆提供session机制,可用于构建分布式锁. session作为节点,健康检查和key/value数据之间的绑定层. 它们旨在提供粒度锁定,并受到“The Chubby Lock Ser ...
- 穿透Session 0 隔离(二)
上一篇我们已经对Session 0 隔离有了进一步认识,如果在开发过程中确实需要服务与桌面用户进行交互,可以通过远程桌面服务的API 绕过Session 0 的隔离完成交互操作. 对于简单的交互,服务 ...
- (七)Session 对象知识点总结(来自那些年的笔记)
如果你想要转载话,可不可以不要删掉下面的 作者信息 呀!: 作者:淮左白衣 写于 来源笔者自己之前学javaWeb的时候,写的笔记 : 目录 Session对象 Session和cookie的主要区别 ...
- SQL Server的Execute As与连接池结合使用的测试
简介 在SQL Server中,Execute As关键字允许当前账户在特定上下文中以另一个用户或登录名的身份执行SQL语句,比如用户张三有权限访问订单表,用户李四并没有权限访问订单表,那么给 ...
随机推荐
- 重新认识Clientset
重新认识Clientset 1.介绍 Clientset 是调用 Kubernetes 资源对象最常用的客户端,可以操作所有的资源对象. 那么在 Clientset 中使如何用这些资源的呢? 因为在 ...
- 为什么构建容器需要Namespace?
1.什么是Namespace? Namespace 是 Linux 内核的一个特性,该特性可以实现在同一主机系统中,对进程 ID.主机名.用户 ID.文件名.网络和进程间通信等资源的隔离.Docker ...
- 【语义分割专栏】3:Segnet实战篇(附上完整可运行的代码pytorch)
目录 前言 Segnet全流程代码 模型搭建(model) 数据处理(dataloader) 评价指标(metric) 训练流程(train) 模型测试(test) 效果图 结语 前言 Segnet原 ...
- Redhat 7.2 中文显示及中文输入法设置
一.安装系统语言为中文(此步可以忽略)-1- 查看系统中文语言安装包1命令:yum list kde*chinese 结果:可用安装包 kde-l10n-Chinese.noarch Hint 1:y ...
- 推荐五大AI+MCP自动化测试工具!
在当今快速发展的软件行业,自动化测试已成为提升开发效率和产品质量的关键.今天,我们将给大家推荐五大MCP自动化测试工具,助你在自动化测试领域更进一步. 1.MCP介绍 首先,你得知道,MCP是什么? ...
- MongoDB入门实战教程(5)
前面我们学习了MongoDB的基本查询命令操作,作为后端开发的我们大部分场景都是在应用程序中和MongoDB进行交互,因此本篇我们来学习一下如何在ASP.NET Core中集成MongoDB. 1 配 ...
- C# 去除字符串中重复的 字段
string test = "保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳,保护壳, ...
- linux 网络编程 新技能
{} 配对问题.这个在多个json文件中找到配对的{} 括号实在不容易. 使用 % 号吧少年. gg 跳到首部 GG 跳转到尾部. XXG 可以跳转到多少多少行. gcc -E 执行预处理的结果.变量 ...
- 简述FPS的计算方法
参考链接 cnblog 个人理解 单位时间内刷新的次数.
- java 核心编程 toolbar
简介 toolbar code /* * @Author: your name * @Date: 2020-11-08 09:38:15 * @LastEditTime: 2020-11-08 10: ...