分布式 session

分布式 session

种 session 的时候需要注意范围,也就是 cookie.domain

比如两个域名:a.heo.com,b.heo.com。如果要共享 cookie,可以种一个更高层的公共域名,比如 heo.com

当服务器 A (localhost:8080)登录用户,然后请求发到服务器 B(localhost:8081),那么结果请求 B 时,B 还会作出相应吗?这就需要考虑到分布式 session。

当用户在 A 登录,所以 session(用户登录信息)存在了 A 上,然后因为 B 没有用户信息,所以不认识用户,也做不出正确的响应。

解决方案:共享存储 ,而不是把数据放到单台服务器的内存中。

Session 共享实现Redis

如何共享存储?

  1. Redis(基于内存的 K / V 数据库)此处选择 Redis,因为用户信息读取 / 是否登录的判断极其频繁 ,Redis 基于内存,读写性能很高,简单的数据单机 (qps 5w - 10w)。
  2. MySQL
  3. 文件服务器 ceph

redis 管理工具可以使用 quickredis。

使用方法

  1. 引入 redis,能够操作 redis:

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.6.4</version> </dependency>
  2. 引入 spring-session 和 redis 的整合,自动将 session 存储到 redis 中:

    <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>2.6.3</version> </dependency>
  3. 修改 spring-session 存储配置 spring.session.store-type。默认是 none,表示存储在单台服务器 。store-type: redis,表示从 redis 读写 session。

    spring:
    application:
    name: match-mate
    session:
    timeout: 86400
    store-type: redis
    redis:
    port: 6379
    host: localhost
    database: 0

  4. 测试结果

为了测试结果,我们可以用不同的端口启动我们的后端项目。一,idea在8080端口启动。二,打包后再8081端口启动。

8080端口:

8081端口:

成功携带8080端口登录获得的用户信息(session),来请求响应8081端口的接口。

查看 redis 0号库 成功存储 session。

相关推荐
心随雨下20 分钟前
Redis中Geospatial 实际应用指南
数据库·redis·分布式·缓存
想你依然心痛3 小时前
Spark大数据分析与实战笔记(第六章 Kafka分布式发布订阅消息系统-01)
笔记·分布式·spark
故事很腻i3 小时前
安装kafka-2.5.1
分布式·kafka
大数据CLUB5 小时前
基于spark的抖音短视频数据分析及可视化
大数据·hadoop·分布式·数据分析·spark
老友@7 小时前
集中式架构、分布式架构与微服务架构全面解析
分布式·微服务·架构·系统架构
前端世界7 小时前
从0到1实现鸿蒙智能设备状态监控:轻量级架构、分布式同步与MQTT实战全解析
分布式·架构·harmonyos
koping_wu17 小时前
【Redis】用Redis实现分布式锁、乐观锁
数据库·redis·分布式
Lansonli19 小时前
大数据Spark(六十八):Transformation转换算子所有Join操作和union
大数据·分布式·spark
Z_z在努力1 天前
【rabbitmq】RabbitMQ 全面详解:从核心概念到高级应用
分布式·rabbitmq
2301_772093561 天前
Fastdfs_MinIO_腾讯COS_具体逻辑解析
数据库·redis·分布式·中间件