文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

利用Spring Session和redis对Session进行共享详解

2023-05-31 05:50

关注

前言

我们在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。

session的处理有很多种方法,详情见转载的上篇博客:集群/分布式环境下5种session处理策略

在这里我们讨论其中的第三种方法:session共享。

redis集群做主从复制,利用redis数据库的最终一致性,将session信息存入redis中。当应用服务器发现session不在本机内存的时候,就去redis数据库中查找,因为redis数据库是独立于应用服务器的数据库,所以可以做到session的共享和高可用。

不足:

redis需要内存较大,否则会出现用户session从Cache中被清除。

需要定期的刷新缓存

初步结构如下:

利用Spring Session和redis对Session进行共享详解

但是这个结构仍然存在问题,redis master是一个重要瓶颈,如果master崩溃的时候,但是redis不会主动的进行master切换,这时session服务中断。

但是我们先做到这个结构,后面再进行优化修改。

Spring Boot提供了Spring Session来完成session共享。

官方文档:http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html#boot-sample

首先创建简单的Controller:

@Controller public class UserController {   @RequestMapping(value="/main", method=RequestMethod.GET)  public String main(HttpServletRequest request) {  HttpSession session = request.getSession();  String sessionId = (String) session.getAttribute("sessionId");  if (null != sessionId) { // sessionId不为空  System.out.println("main sessionId:" + sessionId);  return "main";  } else { // sessionId为空  return "redirect:/login";  }  }    @RequestMapping(value="/login", method=RequestMethod.GET)  public String login() {  return "login";  }   @RequestMapping(value="/doLogin", method=RequestMethod.POST)  public String doLogin(HttpServletRequest request) {  System.out.println("I do real login here");  HttpSession session = request.getSession();  String sessionId = UUID.randomUUID().toString();  session.setAttribute("sessionId", sessionId);  System.out.println("login sessionId:" + sessionId);  return "redirect:/main";  } } 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯