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裏面了。

3、總結

其實發現這個問題的時候,會感覺很難做,無從下手,感覺這是一個很有難度的事情。但是如果仔細將問題原因分析出來,然後查找相關的資料,其實早就有很簡單的解決方案了。

因爲我的項目是Spring boot開發的所以集成Spring session redis非常容易。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章