Redis 实现 Session 共享

什么是Session

  • session 是一种服务端的会话机制
  • session 属于域对象,作用范围是一次会话

服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。

Session 一致性问题

当第一次请求来时,服务器端会接受到客户端请求,会创建一个 session,使用响应头返回 sessionid 给客户端。浏览器获取到 sessionid 后会保存到本地 cookie 中

当第二次请求来时,客户端会读取本地的 sessionid,存放在请求头中,服务端在请求头中获取对象的 sessionid 在本地 session 内存中查询

session 属于会话机制,当前会话结束时,session 就会被销毁,并且 web 程序会为每一次不同的会话创建不同的 session,所以在分布式场景下,即使是调用同一个方法执行同样的代码,但是他们的服务器不同,自然 web 程序不同,整个上下文对象也不同,理所当然 session 也是不同的。

Spring Session

实现原理

当 Web 服务器接收到 http 请求后,请求进入对应的 Filter 进行过滤,将原本需要由 web 服务器创建会话的过程转交给 Spring-Session 进行创建,本来创建的会话保存在 Web 服务器内存中,通过 Spring-Session 创建的会话信息可以保存在第三方的服务中,如:Redis,MySQL 等。Web 服务器之间通过连接第三方服务来共享数据,实现 Session 共享!

实现过程

  • 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
  • 修改 application.yml 添加配置
spring:
  redis:
    host: localhost
    port: 6379
    password: yourpassword # 如果设置了密码的话
    database: 0 # Redis 数据库索引
    timeout: 5000 # 连接超时时间(毫秒)
  session:
    store-type: redis # 默认是 none,表示存储在单台服务器,redis 表示从 redis 读写 session
来自河南
感谢观看!欢迎联系或留言!
码字不易!转载请标明来源——
- 文章:Redis 实现 Session 共享
- 作者:longlong
- 链接:https://blog.long-code.cn/index.php/2024/03/19/461/
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇