最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

大廠很多項(xiàng)目都是部署到多臺(tái)服務(wù)器上,這些服務(wù)器在各個(gè)地區(qū)都存在,當(dāng)我們?cè)L問(wèn)服務(wù)時(shí)雖然執(zhí)行的是同一個(gè)服務(wù),但是可能是不同服務(wù)器運(yùn)行的;

在我學(xué)習(xí)項(xiàng)目時(shí)遇到這樣一個(gè)登錄情景,假設(shè)有如下三臺(tái)服務(wù)器(如圖),就使用session存放用戶(hù)的登錄信息,通過(guò)該信息可以判斷用戶(hù)是否登錄:

image-20220617235237900

假設(shè)本次登錄是通過(guò)服務(wù)器01執(zhí)行的,那么這次的登錄session信息就存放到了內(nèi)存01中;但是當(dāng)我再次訪問(wèn)時(shí)卻是服務(wù)器02執(zhí)行操作,而登錄session信息卻在內(nèi)存01中,服務(wù)器02無(wú)法獲取,所以它就會(huì)判斷我沒(méi)有登錄,返回錯(cuò)誤的信息…

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

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

image-20220618000646960

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

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

這里其實(shí)選擇非關(guān)系型數(shù)據(jù)庫(kù)最好,因?yàn)镽edis基于內(nèi)存,讀寫(xiě)性能高,很適合這種用戶(hù)信息頻繁讀取的情況;

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

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

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

案例介紹

這里有一個(gè)用戶(hù)管理項(xiàng)目,在登錄時(shí)登錄邏輯代碼會(huì)記錄下來(lái)登錄用戶(hù)的session信息:

image-20220618001028206

然后同時(shí)開(kāi)啟了該項(xiàng)目的兩個(gè)服務(wù):localhost:8080和localhost:8082(可以當(dāng)作兩臺(tái)不同服務(wù)器上運(yùn)行的項(xiàng)目)

image-20220618001134687

開(kāi)啟服務(wù)后可以訪問(wèn)對(duì)應(yīng)的接口文檔:

image-20220618001344977

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

image-20220618001357723

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

登錄接口:記錄登錄用戶(hù)session信息

image-20220618001513459

登錄測(cè)試:

image-20220618001842004

獲取當(dāng)前用戶(hù)信息接口:通過(guò)登錄session獲取當(dāng)前用戶(hù)信息

image-20220618001613904

獲取當(dāng)前登錄用戶(hù)信息測(cè)試:

image-20220618002135986

因?yàn)楝F(xiàn)在這是兩個(gè)服務(wù),所以肯定實(shí)現(xiàn)不了共享session的,就算在8080端口的服務(wù)登錄了,也無(wú)法在8082端口的服務(wù)獲取到當(dāng)前用戶(hù)信息;(再次強(qiáng)調(diào):上面測(cè)試可以獲取到當(dāng)前用戶(hù)信息是因?yàn)樵谕粋€(gè)服務(wù)中測(cè)試的,同一個(gè)服務(wù)session存放到他自己的內(nèi)存中當(dāng)然可以自己訪問(wèn)了)

具體操作

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

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

image-20220618002747593

通過(guò)可視化工具可以連接一下:

image-20220618002914040

這樣redis就配置好了,下面在項(xiàng)目代碼中配置redis:

在項(xiàng)目中引入redis依賴(lài)和spring-session配置依賴(lài)(自動(dòng)將 session 存儲(chǔ)到 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相關(guān)配置:

spring:
  # session配置
  session:
    timeout: 86400 # 設(shè)置session失效時(shí)間
    store-type: redis # 修改spring-session存儲(chǔ)配置,默認(rèn)存儲(chǔ)到服務(wù)器內(nèi)存中,現(xiàn)在設(shè)置存到redis中(關(guān)鍵)
  # redis配置
  redis:
    port: 8081 # redis的端口號(hào)(這里是我的redis容器在docker中對(duì)應(yīng)的端口號(hào))
    host: xx.xxx.xxx.xxx # 我的云服務(wù)器ip
    database: 0 # 設(shè)置存入redis的哪一個(gè)庫(kù)(默認(rèn)是0)

其實(shí)關(guān)鍵配置就一個(gè): store-type: redis,只要配置了這個(gè),那么代碼中session就會(huì)存放到redis中而不是自己的內(nèi)存中;

接下來(lái)就可以測(cè)試了:

調(diào)用登錄接口,生成用戶(hù)session信息,查看redis:

image-20220618003922346

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

登錄:

image-20220618004305244

獲取信息:

image-20220618004158416

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

需要注意:引入redis和spring-redis依賴(lài)版本需要接近;

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

相關(guān)文章

  • 解決Redis緩存擊穿問(wèn)題(互斥鎖、邏輯過(guò)期)

    解決Redis緩存擊穿問(wèn)題(互斥鎖、邏輯過(guò)期)

    本文介紹了背景緩存擊穿問(wèn)題及兩種常見(jiàn)解決方案:互斥鎖與邏輯過(guò)期,互斥鎖通過(guò)獲取鎖來(lái)確保數(shù)據(jù)最新,但響應(yīng)速度慢,可能有死鎖風(fēng)險(xiǎn),邏輯過(guò)期利用過(guò)期字段判斷緩存是否過(guò)期,提高性能但不保證一致性,需要額外內(nèi)存,通過(guò)JMeter測(cè)試,兩種方案都能有效緩解緩存擊穿問(wèn)題
    2026-02-02
  • 關(guān)于Redis解決Session共享問(wèn)題

    關(guān)于Redis解決Session共享問(wèn)題

    這篇文章主要介紹了Redis解決Session共享問(wèn)題,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 壓縮列表犧牲速度來(lái)節(jié)省內(nèi)存,Redis是膨脹了嗎

    壓縮列表犧牲速度來(lái)節(jié)省內(nèi)存,Redis是膨脹了嗎

    這篇文章主要給大家解釋了Redis 當(dāng)中的 ziplist(壓縮列表)犧牲速度來(lái)節(jié)省內(nèi)存的原因,希望大家能夠喜歡
    2021-02-02
  • Redis緩存的大小合理配置的實(shí)現(xiàn)示例

    Redis緩存的大小合理配置的實(shí)現(xiàn)示例

    合理配置Redis緩存大小是確保系統(tǒng)性能和穩(wěn)定性的關(guān)鍵,本文就來(lái)詳細(xì)的介紹一下Redis緩存的大小合理配置的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-10-10
  • redis中的配置以及密碼設(shè)置方式

    redis中的配置以及密碼設(shè)置方式

    這篇文章主要介紹了redis中的配置以及密碼設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 玩轉(zhuǎn)Redis搭建集群之Sentinel詳解

    玩轉(zhuǎn)Redis搭建集群之Sentinel詳解

    這篇文章主要給大家介紹了關(guān)于Redis搭建集群之Sentinel的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • redis中的bitmap你了解嗎

    redis中的bitmap你了解嗎

    這篇文章主要為大家詳細(xì)介紹了redis中的bitmap,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Redis 8種基本數(shù)據(jù)類(lèi)型及常用命令和數(shù)據(jù)類(lèi)型的應(yīng)用場(chǎng)景小結(jié)

    Redis 8種基本數(shù)據(jù)類(lèi)型及常用命令和數(shù)據(jù)類(lèi)型的應(yīng)用場(chǎng)景小結(jié)

    Redis是一種基于內(nèi)存操作的數(shù)據(jù)庫(kù),其中多虧于高效的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了Redis 8種基本數(shù)據(jù)類(lèi)型及常用命令和數(shù)據(jù)類(lèi)型的應(yīng)用場(chǎng)景小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Redis教程(十五):C語(yǔ)言連接操作代碼實(shí)例

    Redis教程(十五):C語(yǔ)言連接操作代碼實(shí)例

    這篇文章主要介紹了Redis教程(十五):C語(yǔ)言連接操作代碼實(shí)例,本篇博客是該系列博客中的最后一篇,在這里將給出基于Redis客戶(hù)端組件訪問(wèn)并操作Redis服務(wù)器的代碼示例,需要的朋友可以參考下
    2015-05-05
  • Redis中Hash類(lèi)型相關(guān)命令介紹

    Redis中Hash類(lèi)型相關(guān)命令介紹

    Redis?hash是一個(gè)String類(lèi)型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象,這篇文章主要介紹了Redis中Hash類(lèi)型相關(guān)命令的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-12-12

最新評(píng)論

怀集县| 涟源市| 文成县| 沙湾县| 额济纳旗| 苏州市| 蒲城县| 灵武市| 定兴县| 泸溪县| 逊克县| 梅州市| 赤峰市| 襄汾县| 项城市| 永年县| 克什克腾旗| 永胜县| 肃宁县| 湖口县| 连城县| 闽清县| 岳西县| 原平市| 固原市| 清苑县| 宕昌县| 甘孜| 鄂托克前旗| 东乡族自治县| 罗城| 诸暨市| 呈贡县| 卫辉市| 称多县| 龙州县| 惠东县| 镇赉县| 肃南| 昭平县| 林口县|