模仿HttpSession自定义Session并且使用Redis支持共享,能完美接入负载均衡

时间:2024-03-30 18:29:52

模仿HttpSession自定义Session并且使用Redis支持共享,能完美接入负载均衡

首先声明:上一次AOP的文章是从本人个人公众号转过来的,因为是复制的所以图片无法加载,如果需要原文可以直接访问
http://mp.weixin.qq.com/s/9AsSgYn7PJGAcn6rTaof8g

开始前首先理解几个概念:
负载均衡:
对象序列化:
HttpSession:

负载均衡:
假如当前的Tomcat服务器只最大只能承受1200的用户访问,但是此时有5000的需求量,这样会导致Tomcat拒绝服务,使用我们会横向拓展,使用多个Tomcat平均分散这些请求,一起服务这5000个量,这样的方式称作负载均衡

对象序列化:
当需要把已经实例化的对象持久化到内存中的时候,需要对其进行序列化成二进制或者JSON,当再次使用的时候将其反序列化成实例到内存中(这样既有利于数据传输,又有利于数据持久化)

HttpSession:
当客户机(浏览器)使用Http协议访问服务器的时候,服务器会默认在自己的内存中开辟一块空间用来保存这个客户机的数据的那个对象

现在开始进入正题:

本次我自己写了一个实例对象,模仿HttpSession并且将其序列化到redis里面这样使整个Web应用可以支持负载均衡(Httpsession是自己服务器内存中的,单多台服务器运行的时候session默认无法共享访问)

1、首先写Mysession
这个Mysession就是我自己写的session
模仿HttpSession自定义Session并且使用Redis支持共享,能完美接入负载均衡

这里的ID是需要模仿HttpSession id那样唯一的,所以我使用了MD5加密算法的方式生成(用随机数+salt(盐)+时间戳)这样能保证ID的唯一性

2、编写对Redis的操作
将Mysession序列化后放入redis
模仿HttpSession自定义Session并且使用Redis支持共享,能完美接入负载均衡

从Redis中取出Mysession
模仿HttpSession自定义Session并且使用Redis支持共享,能完美接入负载均衡

我这里使用的是protostuff去序列化对象,打击可以百度先了解这个东西的使用

3、将Mysession的ID写到客户机浏览器的cookie里面
这里通过客户机提供的SessionID去redis查找Mysession的实例(我这里里将业务功能写在拦截器里面)
模仿HttpSession自定义Session并且使用Redis支持共享,能完美接入负载均衡

4、在认证阶段取出Mysession
模仿HttpSession自定义Session并且使用Redis支持共享,能完美接入负载均衡

以上就是简答自己实现类似于HttpSession的Mysession的方式,并且使其可以序列化并且配合redis使用

欢迎大家提出自己宝贵的意见