欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis實現(xiàn)session共享的方法

 更新時間:2023年04月14日 14:48:56   作者:YXXYX  
本文主要介紹了redis實現(xiàn)session共享的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

引言

大廠很多項目都是部署到多臺服務器上,這些服務器在各個地區(qū)都存在,當我們訪問服務時雖然執(zhí)行的是同一個服務,但是可能是不同服務器運行的;

在我學習項目時遇到這樣一個登錄情景,假設有如下三臺服務器(如圖),就使用session存放用戶的登錄信息,通過該信息可以判斷用戶是否登錄:

image-20220617235237900

假設本次登錄是通過服務器01執(zhí)行的,那么這次的登錄session信息就存放到了內存01中;但是當我再次訪問時卻是服務器02執(zhí)行操作,而登錄session信息卻在內存01中,服務器02無法獲取,所以它就會判斷我沒有登錄,返回錯誤的信息…

我們想要實現(xiàn)的就是通過一臺服務器登錄所生成的session可以和其他服務器共享,那么該如何實現(xiàn)?

解決方法 思路就是既然這幾個服務器自己的內存不能共享,那么只要有一個共享空間供這幾個服務器共同訪問不就可以了(如圖);

image-20220618000646960

首先想到的應該就是數(shù)據(jù)庫,只要這些服務器集群共享一個數(shù)據(jù)庫,并把生成的session信息存放到數(shù)據(jù)庫中不就可以了,這樣大家都可以訪問;數(shù)據(jù)庫有關系型和非關系型(NoSql):

  • 關系型數(shù)據(jù)庫:Mysql等
  • 非關系型數(shù)據(jù)庫:Redis(K/V數(shù)據(jù)庫)等

這里其實選擇非關系型數(shù)據(jù)庫最好,因為Redis基于內存,讀寫性能高,很適合這種用戶信息頻繁讀取的情況;

還可以通過文件服務器實現(xiàn),這里就不介紹了;

還有一種方法,可以通過nginx的iphash實現(xiàn),該方法非常簡單,但是思路和上面兩種不同,原理就是同一個ip的所有請求都會被nginx進行iphash進行計算,將結果綁定到指定服務器,之后這個請求都會訪問到該服務器中。
但是這樣就有一些問題,首先就算負載均衡就沒有太大意義了,如果綁定的服務器掛了,那么iphash也就失效了;又或者你的請求被其他服務分發(fā)而未走nginx服務,那么iphash同樣不生效;所以謹慎使用;

下面我就簡單通過代碼模擬一下如何通過redis配置輕松實現(xiàn)session共享

案例介紹

這里有一個用戶管理項目,在登錄時登錄邏輯代碼會記錄下來登錄用戶的session信息:

image-20220618001028206

然后同時開啟了該項目的兩個服務:localhost:8080和localhost:8082(可以當作兩臺不同服務器上運行的項目)

image-20220618001134687

開啟服務后可以訪問對應的接口文檔:

image-20220618001344977

-----------------------------------分割線-------------------------------------------

image-20220618001357723

該服務都有以下兩個接口:(以下測試是在同一個服務中測試的)

登錄接口:記錄登錄用戶session信息

image-20220618001513459

登錄測試:

image-20220618001842004

獲取當前用戶信息接口:通過登錄session獲取當前用戶信息

image-20220618001613904

獲取當前登錄用戶信息測試:

image-20220618002135986

因為現(xiàn)在這是兩個服務,所以肯定實現(xiàn)不了共享session的,就算在8080端口的服務登錄了,也無法在8082端口的服務獲取到當前用戶信息;(再次強調:上面測試可以獲取到當前用戶信息是因為在同一個服務中測試的,同一個服務session存放到他自己的內存中當然可以自己訪問了)

具體操作

下面就通過redis配置實現(xiàn)共享session:

首先要下載redis,下載網(wǎng)上找教程;這里我直接用的在服務器上通過docker創(chuàng)建的redis容器(簡單好用,強烈推薦):

image-20220618002747593

通過可視化工具可以連接一下:

image-20220618002914040

這樣redis就配置好了,下面在項目代碼中配置redis:

在項目中引入redis依賴和spring-session配置依賴(自動將 session 存儲到 redis 中):

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
	<version>2.6.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
	<version>2.6.3</version>
</dependency>

在application.yml文件中配置連接redis和session相關配置:

spring:
  # session配置
  session:
    timeout: 86400 # 設置session失效時間
    store-type: redis # 修改spring-session存儲配置,默認存儲到服務器內存中,現(xiàn)在設置存到redis中(關鍵)
  # redis配置
  redis:
    port: 8081 # redis的端口號(這里是我的redis容器在docker中對應的端口號)
    host: xx.xxx.xxx.xxx # 我的云服務器ip
    database: 0 # 設置存入redis的哪一個庫(默認是0)

其實關鍵配置就一個: store-type: redis,只要配置了這個,那么代碼中session就會存放到redis中而不是自己的內存中;

接下來就可以測試了:

調用登錄接口,生成用戶session信息,查看redis:

image-20220618003922346

可以看到用戶登錄session已經(jīng)存放到redis中了,這樣我在8080端口登錄,在8082也可以獲取到登錄的session信息:

登錄:

image-20220618004305244

獲取信息:

image-20220618004158416

這樣就通過redis實現(xiàn)session共享了;

需要注意:引入redis和spring-redis依賴版本需要接近;

到此這篇關于redis實現(xiàn)session共享的方法的文章就介紹到這了,更多相關redis session共享內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解SSH框架和Redis的整合

    詳解SSH框架和Redis的整合

    本篇文章主要介紹了SSH框架和Redis的整合,詳細的介紹了Struts+Spring+Hibernate和Redis整合,有興趣的可以了解一下。
    2017-03-03
  • RedisAPI原子性操作及原理解析

    RedisAPI原子性操作及原理解析

    這篇文章主要介紹了RedisAPI原子性操作及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • 淺談Redis跟MySQL的雙寫問題解決方案

    淺談Redis跟MySQL的雙寫問題解決方案

    項目中有遇到這個問題,跟MySQL中的數(shù)據(jù)不一致,記錄一下,本文主要介紹了Redis跟MySQL的雙寫問題解決方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作

    springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作

    這篇文章主要介紹了springboot +redis 實現(xiàn)點贊、瀏覽、收藏、評論等數(shù)量的增減操作,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 關于Redis的主從復制及哨兵問題

    關于Redis的主從復制及哨兵問題

    redis中以master為主機,slave為從機,一個master可以對應多個slave,而一個slave只能對應一個master,這篇文章主要介紹了Redis的主從復制及哨兵,需要的朋友可以參考下
    2022-06-06
  • Redis數(shù)據(jù)庫原理深入刨析

    Redis數(shù)據(jù)庫原理深入刨析

    在之前的文章我們介紹過,Redis服務器在啟動之初,會初始化RedisServer的實例,在這個實例中存在很多重要的屬性結構,同理本篇博客中介紹的數(shù)據(jù)庫實現(xiàn)原理也會和其中的某些屬性相關,我們繼續(xù)看一下吧
    2022-11-11
  • mac下設置redis開機啟動方法步驟

    mac下設置redis開機啟動方法步驟

    這篇文章主要介紹了mac下設置redis開機啟動,本文詳細的給出了操作步驟,需要的朋友可以參考下
    2015-07-07
  • Redis和數(shù)據(jù)庫 數(shù)據(jù)同步問題的解決

    Redis和數(shù)據(jù)庫 數(shù)據(jù)同步問題的解決

    這篇文章主要介紹了Redis和數(shù)據(jù)庫 數(shù)據(jù)同步問題的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Windows下搭建Redis哨兵集群模式的方法步驟

    Windows下搭建Redis哨兵集群模式的方法步驟

    哨兵模式,是基于主從復制模式,主從復制的優(yōu)點全都擁有,并且主從可以實現(xiàn)自動切換,故障轉移等功能,本文主要介紹了Windows下搭建Redis哨兵集群模式的方法步驟,文中通過圖文介紹的非常詳細,感興趣的小伙伴們可以參考一下,需要的朋友可以參考下
    2023-09-09
  • 關于Redis解決Session共享問題

    關于Redis解決Session共享問題

    這篇文章主要介紹了Redis解決Session共享問題,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07

最新評論