您的位置:首页 > 编程语言 > Java开发

[置顶] spring-boot实战:共享session

2017-10-01 18:43 295 查看
在工作中会遇到以下几个场景:

1. 发布新功能或修复bug,服务重启,用户需要重新登录

2. 当集群内某个节点失效时,用户明明刚登录,仍被提示需要重新登录

那如何做到服务发布、集群节点失效对用户无感知呢?有以下几种方式:

1. 使用cookie保存用户状态信息

2. session同步法(多个web-server之间相互同步session)

3. 后端统一存储(如:redis)

关于这几种方法的优缺点这里不再展开,可参看阅读《session一致性架构设计实践》,讲的很透彻,调理清晰。我们重点来看下如何通过后端统一存储来实现session共享,通过查找,发现了一个比较好的方案,spring-session,整合特别简单。

1、在项目内引入redis

参考我之前的一篇文档《spring boot项目实战:redis》,这里不再展开。

2、添加maven依赖

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>


3、添加java配置

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds=7200,redisNamespace="base")
public class RedisSessionConfig {

}


maxInactiveIntervalInSeconds用于设置session有效时间

redisNamespace用于区分不同的项目,如果多个项目共用用户数据,可以采用相同的值,这样就简单的实现了统一登录效果

要提醒的一点是如果用户数据特别大,需要注意redis容量规范及数据库规范,尽量保证缓存键分类存储在不同的库内,如用户session数据存储在数据库1内,业务缓存存储在0内,以此类推。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: