spring-session-data-redis的实现原理剖析

1. 写在前边

spring-session-data-redis我们这里简称springSession。 我们知道springSession基于Redis实现了分布式Session的管理,那么下面我们说说什么是分布式session,分布式session实现原理,session为什么要存到redis中,那么SpringSession是如何把Session信息存储到redis中的呢(主题)?


2. 为什么会有分布式session的存在?

我们如果用nginx做一个流量分发,一部分流量请求tomcatA,一部分流量请求tomcatB,同一个用户的不同请求可能会产生在不同的tomcat上,我们知道session是由tomcat管理的,那么我们如何保证两台tomcat的session同步呢,为了解决这一问题,所以产生了分布式session。

总结:分布式session是解决分布式环境session不一致问题的。


3. 分布式session实现原理

为了解决session不一致问题,那么我们放弃服务器容器的默认session保存方式,我们将session保存到自己的数据库中,那么我们就解决了session不一致问题。


4. 分布式session为什么要存到redis中

因为redis是内存数据库,效率高,而且可以做分布式和高可用集群。


5. SpringSession是如何把Session信息存储到redis中的

总体思路是通过一个过滤器,然后重新包装request和reponse以及session。 在SpringSession实现过程中DelegatingFilterProxy就是这个过滤器入口。


6. 下面通过图我们看看SpringSession的实现原理

①sping配置类

spring-session-data-redis的实现原理剖析



②request包装类

spring-session-data-redis的实现原理剖析


③reponse包装类 

spring-session-data-redis的实现原理剖析


④替换request和reponse包装的调用流程

spring-session-data-redis的实现原理剖析

至此已分享结束。