当前位置: 首页 > wzjs >正文

宁波建设协会网站首页怎么建投票网站

宁波建设协会网站首页,怎么建投票网站,网站备案省份,闸北区网站设计与制作Redis 分布式 Session 工作原理 1. 传统 Session 的问题 在传统单服务器环境中,HTTP Session 存储在应用服务器的内存中。这在分布式系统中会导致问题: 用户的请求可能被分发到不同服务器,导致会话不一致服务器宕机会导致会话丢失需要依赖…

Redis 分布式 Session 工作原理

1. 传统 Session 的问题

在传统单服务器环境中,HTTP Session 存储在应用服务器的内存中。这在分布式系统中会导致问题:

  • 用户的请求可能被分发到不同服务器,导致会话不一致
  • 服务器宕机会导致会话丢失
  • 需要依赖负载均衡器的会话粘性(sticky session)机制,限制了系统的伸缩性

2. Spring Session + Redis 解决方案

当配置了Spring Session + Redis后,系统会:

  1. 拦截请求处理流程

    • Spring Session 使用一个过滤器(SpringSessionRepositoryFilter)拦截所有HTTP请求
    • 这个过滤器由DelegatingFilterProxy代理,在Spring Boot应用中自动配置
  2. 替换原生Session实现

    • 过滤器会将容器原生的HttpSession实现替换为Spring自定义的实现
    • 所有对HttpSession的操作实际上都被Spring Session接管
  3. Session数据外部化

    • 所有会话数据存储在Redis中,而非应用服务器内存
    • 客户端仍然通过Cookie接收会话ID
    • 服务器使用该ID从Redis中检索完整的会话数据

3. Redis 存储格式

Redis中的几个关键数据结构:

  • Strings类型spring:session:sessions:expires:{sessionId} - 用于跟踪会话过期
  • Hash表类型spring:session:sessions:{sessionId} - 存储实际的会话数据
  • Sets类型spring:session:expirations:{timestamp} - 用于管理会话的过期机制

4. 请求处理流程

  1. 请求到达

    • 客户端发送请求,包含sessionID的Cookie
    • Spring Session过滤器拦截请求
  2. 会话检索

    • 从Cookie中提取sessionID
    • 使用该ID从Redis查询会话数据
    • 创建包含该数据的会话对象
  3. 请求处理

    • 应用程序使用该会话对象,仿佛它是标准的HttpSession
    • 对会话的任何修改都被跟踪
  4. 请求完成

    • 如果会话数据被修改,更新存储在Redis中的数据
    • 如有必要,更新过期时间

5. 技术亮点

  • 无侵入性:应用代码不需要任何改变,正常使用HttpSession接口
  • 无需会话粘性:负载均衡器不再需要配置sticky session
  • 弹性伸缩:服务器可以随时添加或移除,不影响用户会话
  • 容错性:单个服务器故障不会导致用户会话丢失
  • 集中管理:会话数据集中存储,便于监控和管理

这种设计使得Spring应用可以在分布式环境中无缝扩展,同时保持用户会话的连续性和一致性,是微服务架构中解决用户状态管理的优雅方案。
在这里插入图片描述

  1. 客户端先 带着 HTTP 请求到 负载均衡器
  2. 负载均衡器 转发请求到应用服务器
  3. 被SpringSessionFiliter 拦截
  4. 从 Cookie 中提取 SessionID
    • 如果 该sessionID 存在,通过 该sessionID 从 SessionRespository 获取会话, SessionRespository 查询 Redis 中的 会话数量,RedisOperations 给Redis 服务器发送了 GET spring:session:sessions:{sessionId}。Redis 给 RedisOperations 返回数据。最终在 SessionRespository 构建请求对象给 SpringSessionFiliter

    • 如果 该sessionID 不存在或者过期,那么 SpringSessionFiliter 给 SessionRepository 创建新的会话。sessionRepository 在 Redis 中创建新会话,

      • Strings类型:spring:session:sessions:expires:{sessionId} - 用于跟踪会话过期
      • Hash表类型:spring:session:sessions:{sessionId} - 存储实际的会话数据
      • Sets类型:spring:session:expirations:{timestamp} - 用于管理会话的过期机制

      创建完成后,返回 新的session 对象给 SpringSessionFiliter

业务处理中可能发生修改 会话数量,如果有 SpringSessionFiliter 调用 SessionRepository 保存会话的变更,更新Redis 中的会话数量, HMSET 更新 会话数量,重置过期时间。

Mermind 绘图代码:

sequenceDiagramparticipant C as 客户端participant LB as 负载均衡器participant F as SpringSessionFilterparticipant S as SessionRepositoryparticipant R as RedisOperationsparticipant RD as Redis服务器C->>LB: 1. HTTP请求(带SessionID Cookie)LB->>F: 2. 转发请求到应用服务器F->>F: 3. 拦截请求F->>F: 4. 从Cookie中提取SessionIDalt 存在SessionIDF->>S: 5a. 通过SessionID获取会话S->>R: 6a. 查询Redis中的会话数据R->>RD: 7a. GET spring:session:sessions:{sessionId}RD-->>R: 8a. 返回会话数据R-->>S: 9a. 返回会话数据S-->>F: 10a. 构建Session对象else 不存在SessionID或会话已过期F->>S: 5b. 创建新会话S->>R: 6b. 在Redis中创建新会话R->>RD: 7b. HMSET spring:session:sessions:{newId}R->>RD: 8b. SET spring:session:sessions:expires:{newId}R->>RD: 9b. SADD spring:session:expirations:{expireTime}RD-->>R: 10b. 确认创建成功R-->>S: 11b. 返回新会话IDS-->>F: 12b. 返回新Session对象endF->>+S: 13. 包装为SessionRepositoryRequestWrapperS->>-F: 14. 返回包装后的请求对象F->>F: 15. 继续请求处理链Note over F,S: 业务逻辑处理期间可能会修改会话数据F->>S: 16. 保存会话变更(如有)S->>R: 17. 更新Redis中的会话数据R->>RD: 18. HMSET 更新会话数据R->>RD: 19. 重置过期时间F->>LB: 20. 返回HTTP响应LB->>C: 21. 转发响应

文章转载自:

http://ePKpCoue.xcbnc.cn
http://FCn5vinP.xcbnc.cn
http://ID6t6Mag.xcbnc.cn
http://I323P855.xcbnc.cn
http://wqKE1of3.xcbnc.cn
http://MS6d0tNK.xcbnc.cn
http://aU5cAz4d.xcbnc.cn
http://yPsRtm1D.xcbnc.cn
http://L3xK9oGX.xcbnc.cn
http://kaMjwo6x.xcbnc.cn
http://5K6f3QrJ.xcbnc.cn
http://NeQHRdUg.xcbnc.cn
http://gK5RIQhU.xcbnc.cn
http://RlwZxymb.xcbnc.cn
http://1jvXETO7.xcbnc.cn
http://tOzETDgs.xcbnc.cn
http://jZjK33Y8.xcbnc.cn
http://oQLTuZsy.xcbnc.cn
http://KPpnTlZ0.xcbnc.cn
http://EfEbbcYK.xcbnc.cn
http://jJqKswmC.xcbnc.cn
http://uogWby1r.xcbnc.cn
http://t04a8IbS.xcbnc.cn
http://huFZRvZv.xcbnc.cn
http://jZK0TxYm.xcbnc.cn
http://CeCtdWv8.xcbnc.cn
http://cSgkUmJt.xcbnc.cn
http://R7LUBzyM.xcbnc.cn
http://up75OHBZ.xcbnc.cn
http://llr2DIwn.xcbnc.cn
http://www.dtcms.com/wzjs/607909.html

相关文章:

  • 帮别人做网站被抓一般可以建些什么种类的网站
  • 做网站 站内搜索引擎广州平面设计工作室
  • 网站主机托管有哪些做包装盒的网站
  • 建立网站 英语怎么说301重定向到新网站
  • 企业网站建设(信科网络)设计企业公司网站
  • 网站建设之后建设报名系统网站
  • 住房和建设厅官方网站全网营销推广是什么
  • 在线听音乐网站建设广东智能网站建设哪家有
  • 两学一做 官方网站公司官网网站如何建立
  • 动力做网站wordpress漏洞总结
  • 最权威的做网站优化价格怎样做古玩网站
  • asp网站生成静态哪些网站可以做任务挣钱
  • 两个网站合并建设实施方案望野博物馆
  • 自己的电脑可以做网站服务器吗学科专业建设思路和目标
  • 湖南专业建站按效果付贿wordpress 纯净主题
  • 成都好网站seo是什么职位缩写
  • 网站建设存在问题整改报告怎样查看wordpress
  • 做哪个行业的网站好快照不更新怎么办
  • 上海做网站优化公司网站运营需要++做哪些工作
  • 平面设计相关的网站有哪些内容门户网站做的比较好的公司
  • app营销网站模板做的很好的网站
  • 织梦网站新闻列表调用wordpress 主机什么系统
  • 营销型网站建设网站建设制作大丰区城乡和住房建设局网站
  • 怎么描述网站主页做的好做国际网站一般做什么风格
  • 网站如何做分享住房城乡建设干部学院网站
  • 接网站做项目赚钱吗网页怎么打不开
  • 如何将百度云做成网站文件服务器网站后缀有哪些
  • 岳阳网站推广wordpress的标题字体大小
  • 郑州做公司网站的做网站那个程序好
  • 网站开发哪种专业怎么用自己主机做网站、