本文共 1402 字,大约阅读时间需要 4 分钟。
session双机问题在分布式系统中经常会遇到,也有挺多解决方案,列举几种:
1. 使用缓存(如redis)来解决
① 可以自己重写session管理类,自己对session进行管理,这可能会比较麻烦一点,因为要考虑session续期问题,考虑不周全可能会有一些问题
② 如果你使用spring boot,那么你有福了,spring boot有现成的解决方案,O(∩_∩)O~
2.session同步,这个不是本文重点就不说了
本文主要介绍一下spring boot 使用redis解决session双机问题的实现,非常简单。
基于spring boot的项目
org.springframework.boot spring-boot-starter-data-redis
# Redis数据库索引(默认为0)
spring.redis.database=0 # Redis服务器地址 spring.redis.host=*************** # Redis服务器连接端口 spring.redis.port=6379 # Redis服务器连接密码(默认为空) spring.redis.password= # 连接池中的最大空闲连接,默认值也是8。 spring.redis.pool.max-idle=500 #连接池中的最小空闲连接,默认值也是0。 spring.redis.pool.min-idle=50 # 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。 spring.redis.pool.max-active=2000 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException spring.redis.pool.max-wait=1000 # 连接超时时间(毫秒) spring.redis.timeout=0@Configuration//启用spring boot redis session,并设置session过期时间为两小时@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 7200,redisNamespace = "tl")public class RedisSessionConfig {}
使用注解即可: 可以在开启session的同时设置session过期时间,单位为秒
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 7200,redisNamespace = "tl")
使用方式跟正常使用没有任何区别
request.getSession().setAttribute("user", user);
over, 配置很简单吧,而且也不用考虑session的续期问题。
转载地址:http://wjwmf.baihongyu.com/