专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

springcloud实现分布式session(springcloud分布式事务解决方案)

ins518 2025-04-09 17:01:25 技术文章 27 ℃ 0 评论

前言

最新接手了一个即将上线的系统,就我一个人,后端+前端+运维+测试,做这个项目的都离职了,临时叫我接下来,实在是让人头大,而且这个项目很复杂,页面全靠数据库各种表的配置来生成,就跟我交接了一天,bug满天飞,完全不知道怎么搞,唉,难搞,回到正题,今天分享一个简单的分布式session方案,session主要用来存一些用户信息。

技术栈

springboot,springCloud,redis

流程

1:用户登录,将用户信息存到redis,设置过期时间。采用hash结构,键用客户号+渠道组成;

2:将用户客户号+渠道+UUID加密生成loginToken,返回给前端;

3:发生交易时,前端上送loginToken;

4:网关解密loginToken,获取到客户号和渠道,从redis取出用户信息,放到公共报文头里,并更新过期时间;

5:各个中心直接从报文头里获取到用户信息。

优缺点

优点:

1:交易只操作一次redis,减少网络开销;

2:分布式环境不用担心各个服务器之间session不同步;

3:直接从报文头取值,不占用内存。

缺点

1:用户在同一个http请求里面,更新了session值,后续从报文头取的不是最新的值;

2:如果用户信息很大,每次发中心交易,报文头占用过大;

3:loginToken被非法获取,可能造成信息泄露;

4:中心单独测试时,如果没有添加报文头的session信息,交易可能测试失败。

分析

当时本来是想每次取值都从redis里面拿,但是这样很浪费通讯资源。这种方式也有好处,前端不必上送一堆乱七八糟的用户信息,也不用关心交易发到哪台服务器上,导致用户信息查询不到。以前有个项目,他们是存在服务器上面的,用户交易时,需要这个用户的所有交易都发到这台服务器上,还需要做负载处理,很麻烦,时不时交易还飘到其他服务器上了,导致交易失败。

示例

结语

很简单的一个处理,这方案可能不好,但是按照现有的脚手架,目前这种方案还是能满足我的需求的。欢迎提供更好的意见。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表