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
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis可以通过将session信息存储在Redis数据库中来实现session共享。这种方式的优点是可以让服务器之间共享session信息,从而避免用户的请求需要重复认证。同时,使用Redis作为session存储介质可以提供更好的性能和可靠性。引用将session存储在Redis中可以确保session的持久性,即使服务器重启或者宕机,用户的session信息也不会丢失。另外,通过将session信息存储在Redis中,可以方便地进行session的管理和跨服务器的共享。在配置上,需要在应用的配置文件中指定Redis的连接信息以及相关的session配置,如连接的端口号、主机地址、数据库等。引用通过这种方式,可以实现基于Redissession共享功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Redis入门-4-Redis实现session共享](https://blog.csdn.net/a1216701075/article/details/88970820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [session共享redis实现)](https://blog.csdn.net/YXXXYX/article/details/125342292)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值