Redis实战篇session共享问题

实战篇Redis

1.6、session共享问题

核心思路分析:

每个tomcat中都有一份属于自己的session,假设用户第一次访问第一台tomcat,并且把自己的信息存放到第一台服务器的session中,但是第二次这个用户访问到了第二台tomcat,那么在第二台服务器上,肯定没有第一台服务器存放的session,所以此时 整个登录拦截功能就会出现问题,我们能如何解决这个问题呢?早期的方案是session拷贝,就是说虽然每个tomcat上都有不同的session,但是每当任意一台服务器的session修改时,都会同步给其他的Tomcat服务器的session,这样的话,就可以实现session的共享了

但是这种方案具有两个大问题

1、每台服务器中都有完整的一份session数据,服务器压力过大。

2、session拷贝数据时,可能会出现延迟

所以咱们后来采用的方案都是基于redis来完成,我们把session换成redis,redis数据本身就是共享的,就可以避免session共享的问题了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.7 Redis代替session的业务流程

1.7.1、设计key的结构

首先我们要思考一下利用redis来存储数据,那么到底使用哪种结构呢?由于存入的数据比较简单,我们可以考虑使用String,或者是使用哈希,如下图,如果使用String,同学们注意他的value,用多占用一点空间,如果使用哈希,则他的value中只会存储他数据本身,如果不是特别在意内存,其实使用String就可以啦。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.7.2、设计key的具体细节

所以我们可以使用String结构,就是一个简单的key,value键值对的方式,但是关于key的处理,session他是每个用户都有自己的session,但是redis的key是共享的,咱们就不能使用code了

在设计这个key的时候,我们之前讲过需要满足两点

1、key要具有唯一性

2、key要方便携带

如果我们采用phone:手机号这个的数据来存储当然是可以的,但是如果把这样的敏感数据存储到redis中并且从页面中带过来毕竟不太合适,所以我们在后台生成一个随机串token,然后让前端带来这个token就能完成我们的整体逻辑了

相关推荐

  1. 分布式websocket实时通讯的session共享问题

    2024-03-26 00:54:04       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 00:54:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 00:54:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 00:54:04       82 阅读
  4. Python语言-面向对象

    2024-03-26 00:54:04       91 阅读

热门阅读

  1. 7-13 验证“哥德巴赫猜想”

    2024-03-26 00:54:04       38 阅读
  2. 网络编程基础

    2024-03-26 00:54:04       36 阅读
  3. 力扣爆刷第104天之CodeTop100五连刷6-10

    2024-03-26 00:54:04       44 阅读
  4. 《苹果 iOS 应用开发与分发的关键问题解析》

    2024-03-26 00:54:04       38 阅读
  5. 1028记忆化搜索和dp**

    2024-03-26 00:54:04       43 阅读
  6. C语言-扫雷游戏的简单实现

    2024-03-26 00:54:04       42 阅读
  7. C++ 模板知识大全

    2024-03-26 00:54:04       39 阅读
  8. C++ day2

    C++ day2

    2024-03-26 00:54:04      43 阅读
  9. 设计模式(1):介绍

    2024-03-26 00:54:04       39 阅读