session通过redis如何共享

1、背景

最近博主在做微服务的子模块,遇到下面情景问题,服务A和  服务B  都是后台API接口服务,通过负载均衡进行发布在两台linux服务器上面,前端页面通过nginx调用这两个服务,就产生了下面问题。页面第一次请求访问服务A,然后在和A服务做了登录请求并且和A创建了会话session。然后在不可控的情况下,下一个接口调到了服务B,这时候页面和服务B没有会话session,导致被判定为未登录状态,直接打回。

经过分析问题之后,找到微服务的解决办法,只需要把服务A和服务B 的session通过redis共享起来就可以解决上面问题。

2、实现步骤

首先我们需要引用下面的包

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

当然版本可以更具自身项目再另外做出调整。

我这里介绍的是Spring booot的集成方式,比较简洁、方便下面步骤

在application.properties配置文件中加上连接配置信息

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=

然后就是最后一步在启动类上面加上注解

@EnableRedisHttpSession(redisNamespace = "demo")

redisNamespace是可以区分项目,如果有很多项目都在用这一个redis可以加上这个配置进行区分,如果不需要区分其实也可以加上注解就行了。

然后就在服务A上 和服务B上的代码都做出这样的修改,就把服务A和B的session都共享到redis里面了。

扫描二维码关注公众号,回复: 12920941 查看本文章

3、总结

其实发现这个问题的时候,会感觉很难做,无从下手,感觉这是一个很有难度的事情。但是如果仔细将问题原因分析出来,然后查找相关的资料,其实早就有很简单的解决方案了。

因为我的项目是Spring boot开发的所以集成Spring session redis非常容易。

猜你喜欢

转载自blog.csdn.net/miwanmeng/article/details/84940953