断点已经到这儿了,sessionId我们看一下,sessionId是B218,我们把value copy一下

放到这里,然后让Redis存上,key就是session的id,value就是user,后边就是有效期,30分钟,然后F8,我们检查一下redis,先开一个窗口,然后进入redis,可以看到这个key已经存在这里了,我们再get一下,这里面就是user的登陆信息,这个没有关系,存的是汉字,type一下,这个key是一个string,因为我们把这个对象JSON序列话存在这里了,那我们看一下他的有效期,1759,还有1759秒,30分钟,那第二次就变了,现在倒计时,现在已经把用户信息存到这里了

然后我们继续看,这块非常重要,涉及的点也比较多,包括redis,cookie,还有我们的JAVA代码,还有tomcat,一会我们还会把nginx加在这里,所以这里相对来说比较复杂,那也正因为复杂,难度高,所以对我们来说,才不能放弃,越是难的点,我们越要沉下心来,好好学,这个就是弯车到,我们就要在这里超过别人,毕竟还是有门槛的,那我们继续,刚才就是给大家打打气,咱们看一下,localhost,刷新一下,看一下,network刷新,看这里的请求,可以看到,他JESSIONID,正是我们拿的sessionId,在request-header里面

把这个也放过来,放到这里,把前面的删掉,可以看到呢,这两个sessionId是一样的

在Application里面,有一个cookie,点开他,在这里可以看到,这里面的value也是sessionId,那这个就是JSESSIONID

那这个就是JSESSIONID,放到这里,可以看到呢,request里面这个sessionId,正是我们在后台拿到的sessionId,这个就是为了对比看一下,这个值是不是我们想要的,接下来因为我们要做集群,那对tomcat1是OK了,每次他的JSESSIONID都是这个,他的用户信息也都能找到,根据这个JESSIONID,拿这个value也能拿到,那我们现在就要模拟集群的情况,我们再开一个TOMCAT2,但是IDEA不能同时打开两个窗口,就是说对于同一个项目,在open的时候,没有反应,那很简单,看一下,我们复制一下项目,tomcat2,然后再打开他,现在我们就要多进程debug了,我们有两个进程,把tomcat2用idea打开,这个是tomcat2,也放到这里,那tomcat2呢,肯定不能向tomcat1一样,我们这里只要把它部署到tomcat2里面,我们新建一个tomcat,那这里也不需要新增了,我们把这个1改一下就可以了,但是重要的是这里,一定要把tomcat server改成tomcat2,然后是9080端口,然后启动tomcat2,在新的tomcat2里面debug启动,这里报错了,是因为rmi端口已经在用了,我们修改一下

但是呢,这里强调一下,就是在我们tomcat里面,之前讲的那三个端口,一定是已经改好的状态,并且tomcat1和tomcat2都OK,那我们在启动tomcat2的时候,JMX端口改一下,同样加一千,检查一下,9080,2099,Tomcat2 OK,然后我们再启动一下debug,我们访问一下,9080,8080和9080都访问上了,为了更清楚一点呢,我们把jsp也改一下,这个是tomcat2的,左边这个是tomcat1的,然后我们刷新tomcat1和tomcat2,可以看到tomcat1报错了,然后我们把tomcat1重启,因为我们刚刚在创建UserController的时候,加了一些代码,这边还是有改动的,重启一下tomcat1,然后访问一下tomcat1,那么tomcat2也重启一下,tomcat2也启动了,从首页很清楚的分辨出来,那现在问题来了,我们再看一下,因为tomcat1刚刚重启了,我们看一下他的network,可以看到JSSIONID已经变了

也就是说TOMCAT在重启的时候,REQUEST里面的JSESSIONID,已经改变,那我们之前登陆的呢,是白登陆了,因为他的key是B218,不是456,那有的小伙伴可能会说,那我的服务放到现在就不重启了,那这个JSESSIONID是不变的,对,是这样的,那就是说,那tomcat1登陆信息是有效地,我们假设这个是成立的,我们这个服务器永远不重启,那我们继续,那我们自己来认证,看一下tomcat2的,检查,看一下TOMCAT2的JSESSIONID

B6A0肯定也不是我们这个,那很简单,我们清空一下flushdbkeys *

操作给你看,同样的,8080断点肯定过来了

看一下Rediskeys *81B49

那这次请求的是81B49,TOMCAT1

再刷新一下,还是81B49,那81B49已经存到REDIS里边,没有问题

那现在的问题是,因为我们是要做成集群的,那我们下次请求,请求到localhost 9080呢,刷新tomcat2,看一下tomcat2的JSESSIONID,存的是2B26

那我要说的是,我们登录在8080上,8080的session存到了redis服务器里,第二次请求,负载均衡到9080,而这里面的JSESSIONID,是另外一个,那根据这个key,我们在redis里,肯定是找不到的,那会认为请求9080,认为他没有登录,那我们继续来测试,很简单,我们继续开一个端口,我们要干什么呢,打开我们的nginx,然后请求localhost,nginx已经启动,现在我们开始配置host,来模拟这个集群,进一下conf,之前我们用的是imoc.com,这个就是我们的线上,做的这么一个电商的服务,那我们在本地开发的时候,就开始模拟了,很简单,我们把imoc.com.cnf,copy一份出来,happymall.com.cnf,然后我们编辑他,那server就要改一下了,这里也是happymall.com,分别是8080和9080,这两个权重都是1,然后接着往下看,那么servername也要改一下,请求happymall.com,然后proxy_mall改成happymall.com,上面的upstream也要改

我们把它置成bak,以bak为结尾就不会被加载进来

现在只有这么一个配置文件,reload一下sudo ./nginx -s reload

然后编辑我们的hostvim /etc/hosts聪明的小伙伴呢,一定会想到,把这个打开,127.0.0.1指向happymall.com,那这里面我要讲一个扩展的知识点,我们再写一个127.0.0.1,user.happymall.com,很简单,我们的项目不断演进,我们会把用户中心单独抽取出去,成立一个二级域名,user.happymall.com,所有关于登陆,权限,各种验证,都将走user.happymall.com,这个是为了以后演进,放到这里,做一个知识点扩展,那首先还是关注我们的www,user会领着大家来测试,后边使用cookie,操作cookie时候的一些操作

就得保存我们的host文件,然后ping一下ping www.happymal.com

ping一下user.happymall.com

虽然我们线上没有user,这个二级子域名,但是我们一会演示cookie的时候,讲解domain非常重要的一个知识点,那我们继续,回到浏览器,那这个我们现在看到的网站,是在配置host,之前你所看到的网站,那请求的是一个正常的网站,那host已经配置完了,我们再请求一下,看到还没有生效,那我们清空一下浏览器,清除浏览器,再请求一下,这个时候已经提示502,Gate way,没关系,那我们可以把浏览器全部关闭之后,再重新reload一下,因为我们reload是在配置,host之前,所以我们再reload一下sudo ./nginx -s reload然后再刷新,OK,也就是说,我们配置完host,之前reload的,那为什么出现问题呢,来一起来看一下,很简单,我们这个配置文件是这么写的,写的是happymall.com,并不是127.0.0.1:8080,happymall我们在加载nginx的时候,他并没有指向127.0.0.1,因为那个时候,host还没配置,所以如果我们这个配置文件配置的是,域名这种方式,我们本地host一定要reload之前,配置好,并且使他生效,然后再reload nginx的配置,那或者还有一种方式,我们把server里面的节点,配置成127.0.0.1:8080,因为它是不需要通过host来进行解析了,哪还有一种保守的方法,无论你这里面是配域名,还是127.0.0.1,我们在host修改完之后,都reload一下即可

同样的还要注意,像window,linux,部分浏览器的版本,要清空浏览器的数据,清除浏览器数据,关闭所有的浏览器,重新打开,然后再重新请求,我们现在刷新一下,可以看到,这里面很明显,一会tomcat1,一会tomcat2,因为我们是有权重的,那现在问题来了,现在域名请求happymall.com,我们再请求一个,user.happymall.com,这个呢因为我们没有配置nginx配置,他就跳到本地localhost,80端口,正常的,这个呢也生效了,那一会我们要讲一下,我们继续,那现在请求happymall.com,就是刚刚说的,登陆sessionId的问题,TOMCAT1和TOMCAT2,登陆的时候在tomcat1上,sessionId我们也存到redis里面,但是下次请求的时候,我们在线上肯定是用域名的方式,当我们登陆完之后,在tomcat2请求的时候,并不会拿到登陆的信息,因为tomcat2的JSESSIONID,肯定不是TOMACT1的JSESSIONID,可以看一下,这块呢我们用了nginx,两个tomcat打开了两个IDEA,然后配置了host,配置了nginx的反向代理,然后又讲解了redis,现在问题已经说明白了,那我们现在就要推翻之前的假设,之前的假设是说,我这个服务器到线上肯定不重启,那我们既然要做集群,肯定不是一台服务器,即使你TOMCAT1不重启,我请求你这个域名的时候,还是有可能把请求打到TOMCAT2,TOMCAT3,TOMCAT4上,所以你不重启TOMCAT1,想保证session信息也被推翻了,当然不可能不重启,难道你的网站不更新了,问题显而易见,那么我们现在就来搞定他

单点登录Redis存储Session及SessionId问题说明与集群实战-1相关推荐

  1. 单点登录Redis存储Session及SessionId问题说明与集群实战-3

    那现在我们就是要把sessionID的login请求,我们再看一下redis,回到我们的代码,我们现在不请求localhost:8080了,我们要请求happymall.com,因为我们 已经把他配置 ...

  2. 单点登录Redis存储Session及SessionId问题说明与集群实战-4

    现在就是要改造我们getUserInfo,因为我们不会再从session里面获取用户,首先我们要哪一个login_token,这个时候拿到loginToken,如果loginToken是empty的话 ...

  3. 单点登录Redis存储Session及SessionId问题说明与集群实战-2

    我们要写什么呢,我们要在服务端写一个cookie,而这个cookie呢,是写在客户端上的,那他写的就是登陆时候的,sessionId,非常简单,我们开始写一下,首先新建一个类,我们就在util里面创建 ...

  4. 单点登录Redis存储Session及Cookie场景介绍

    首先response如果是成功的话,就是登陆成功,我就不往session里面放值了,直接调用RedisPoolUtil,setEx方法,在设置的时候,直接把他的时间加上,key就用session.ge ...

  5. yii2设置session时间_关于 Swoft 2.0 版本用 Redis 存储 session 时配置问题

    Swoft 2.0 在 session 配置上和 1.0 还是有一些不同地方,而关于这些在 github 上完全没有任何说明,甚至连文档也没有.经过逐步梳理源代码(其中要理解他的 "注解&q ...

  6. 使用Redis缓存Shiro授权认证信息,搭建集群权限系统

    应用如果做负载均衡,集群间session需要共享,如果session没有共享,用户登录系统以后session保存在登录的应用里面,其他应用里面没有session,没有登陆状态,访问会失败.下面介绍一个 ...

  7. redis的三大模式主从,哨兵和集群

    一.前言 二.redis主从复制 1.主从复制的作用: 2.主从复制的流程 3.搭建主从复制 3.1.搭建环境 3.2.安装redis 3.3.主服务器配置查看以下行 3.4.从服务器配置查看以下行 ...

  8. Redis高可用——主从复制、哨兵模式、集群

    文章目录 一.Redis高可用 1.什么是高可用 2.Redis的高可用技术 二.Redis主从复制 1.Redis主从复制的作用 2.主从复制的流程 三.主从复制的搭建 实验准备 1.所有主机安装R ...

  9. Redis实践(二)高可用的集群+哨兵部署

    项目中通常会需要若干台Redis服务器来协同担当起内存数据库的工作,在redis的部署方案上要考虑下面几点: 结构上,单个 Redis 服务器会发生单点故障,而且一台服务器需要承受所有的请求负载. 这 ...

最新文章

  1. vue中获取url参数
  2. Tableau必知必会之如何快速制作 词云(文字云)
  3. OpenCV 之 直方图处理
  4. IOS开发基础之截图、图片文字水印
  5. 荒岛余生为什么没有打开包裹_您会带到荒岛什么办公桌设置?
  6. 专门讲讲这个MYSQL授权当中的with grant option的作用
  7. SAP HANA中创建时间相关的数据时候需要Variant Schema
  8. Git时出现“error: 源引用表达式 main 没有匹配 error: 推送一些引用到 ‘https://github.com/***.git‘ 失败”的错误提示
  9. MVC3基础嵌套总结
  10. jmeter校验结果_JMeter(1)--请求内容验证
  11. 坐标转换计算七参数matlab代码,坐标系转换:已知控制点计算七参数并对数据批量转换...
  12. Python——Selenium Chrome Driver配置
  13. [渝粤教育] 西南科技大学 程序设计语言VB 在线考试复习资料(2)
  14. 201809-1 卖菜
  15. 速达软件各版本及产品ID
  16. 令牌环桶算法的使用案例
  17. 移动硬盘计算机无图标,移动硬盘不显示图标的处理方法
  18. 2018前端走向全栈,Nodejs快速入门视频教程
  19. 【原创】基于SSM的医院预约挂号系统(医院预约挂号系统毕设源代码)
  20. 《计算机工程》投稿经验

热门文章

  1. Firebug的安装方法
  2. Nodejs读写文件
  3. angularjs组件之input mask
  4. 基于读取车载RFID标签自动开关车库门c#算法实现
  5. 为什么EXE不能超过4GB
  6. windows(64位)下使用curl命令
  7. Java学习笔记二:数据类型
  8. 如何使Putty会话颜色更美观
  9. 【Daily Scrum】11-26
  10. 微软将迎来迄今最大补丁日 一次修补49个漏洞