session管理

单体项目时代,session管理比较简单,往往直接存储在内存中即可满足要求,但是随着项目体量不断变大,项目访问量不断增多,往往会选择多节点部署和服务化拆分,带来便利的同时,session管理也带来了问题,最典型的问题,比如请求上一个节点登录成功,但在访问下一个节点的时候会又让你再次登录。
那么今天就来聊聊这种情况下如何做session的管理,比较常见的解决方案大概就是以下几种。

  1. sticky session
    会话粘滞,就是请求发起IP相同的会打到同一台服务器上,原理通常就是对IP求hash值,然后对服务器节点数进行取模,下标就是要访问的服务器节点。通常项目节点前置一般会放置负载均衡器,比如nginx,对nginx做一点配置即可支持会话粘滞功能。
upstream backend{
    ip_hash;
    // 此处配置服务节点
    server 192.168.128.1:8080
 	server 192.168.128.2:8080
 	server 192.168.128.3:8080
}
server {
    listen 8081;
    server_name localhost;
    location / {
    	proxy_pass http://backend;
    }
} 
  1. session replication
    会话复制,就是会话会在服务器节点之间复制,每个服务器节点上都会存在全量的会话信息,我们常用的tomcat就支持会话复制功能。
    参考官方文档:
    https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html
  2. 集中式会话
    说白了,就是会话信息放在一个地方进行统一管理,现在比较常见的作法就是使用nosql数据库来管理session,比如redis或者mongodb。小编使用redis管理session,做法也很简单,springboot项目中直接引入相关依赖,启动类上加上@EnableRedisHttpSession注解即可开启使用redis集中管理session功能
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

session管理大概就是这几种,后续有空详细论述一下spring session之redis管理的相关原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值