spring boot实战之共享session

作者: 思与学 | 来源:发表于2017-10-01 18:40 被阅读219次

    在工作中会遇到以下几个场景:

    1. 发布新功能或修复bug,服务重启,用户需要重新登录
    2. 当集群内某个节点失效时,用户明明刚登录,仍被提示需要重新登录

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

    1. 使用cookie保存用户状态信息
    2. session同步法(多个web-server之间相互同步session)
    3. 后端统一存储(如:redis)

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

    1、在项目内引入redis

    参考我之前的一篇文档《<a href="http://www.jianshu.com/u/1182bf416662" target="_blank">spring boot项目实战:redis</a>》,这里不再展开。

    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内,以此类推。

    本人搭建好的spring boot web后端开发框架已上传至GitHub,欢迎吐槽!
    https://github.com/q7322068/rest-base,已用于多个正式项目,当前可能因为版本问题不是很完善,后续持续优化,希望你能有所收获!

    相关文章

      网友评论

        本文标题:spring boot实战之共享session

        本文链接:https://www.haomeiwen.com/subject/kryaextx.html