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

Redis實(shí)現(xiàn)Session持久化的示例代碼

 更新時(shí)間:2023年09月19日 09:02:16   作者:愛敲代碼的三毛  
Redis是內(nèi)存數(shù)據(jù)庫,數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中,為了避免服務(wù)器斷電等原因?qū)е翿edis進(jìn)程異常退出后數(shù)據(jù)的永久丟失,本文主要介紹了Redis實(shí)現(xiàn)Session持久化的示例代碼,感興趣的可以了解一下

1. 前言

直接使用Session存儲(chǔ)用戶登錄信息,此時(shí)的會(huì)話信息是存儲(chǔ)在內(nèi)中的,只要項(xiàng)目重啟存儲(chǔ)的Session信息就會(huì)丟失。而使用Redis存儲(chǔ)Session的話就不會(huì)存在這種情況,即使項(xiàng)目重啟也并不影響,也無需用戶重新登錄。使用Redis存儲(chǔ)Session,還能讓項(xiàng)目支持分布式的,比如項(xiàng)目部署在多臺(tái)機(jī)器上把多臺(tái)機(jī)器的Session信息存到同一個(gè)Redis服務(wù)器上,就可以避免用戶每次訪問不同服務(wù)器都要進(jìn)行登錄的問題。

2. 操作步驟

添加依賴

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

修改配置文件

# 指定Spring Session的存儲(chǔ)類型為Redis,表示會(huì)將Session數(shù)據(jù)存儲(chǔ)在Redis中
spring.session.store-type=redis
# 設(shè)置Session的超時(shí)時(shí)間為1800秒(30分鐘)
server.servlet.session.timeout=1800
# 設(shè)置Redis的刷新模式為在保存時(shí)刷新,表示在Session數(shù)據(jù)保存到Redis時(shí)會(huì)刷新過期時(shí)間。
spring.session.redis.flush-mode=on_save
# 設(shè)置Redis的命名空間為spring:session,用于區(qū)分不同的Session數(shù)據(jù)。
spring.session.redis.namespace=spring:session
# 設(shè)置Redis服務(wù)器的主機(jī)地址
spring.redis.host=120.25.124.200
# 指定Redis服務(wù)器的密碼
spring.redis.password=
# 指定Redis服務(wù)器的端口號(hào)
spring.redis.port=6379

操作代碼

配置完Redis相關(guān)配置后,以前的代碼無需修項(xiàng)目就可以支持Session持久化了。

存儲(chǔ)到Redis

@PostMapping("/login")
public Response login(String username, String password,HttpServletRequest request,HttpSession httpSession) {
    if (username == null || password == null || "".equals(username.trim()) || "".equals(password.trim()) ){
        return Response.fail("用戶密碼錯(cuò)誤");
    }
    User user = userService.byNameUser(username);
    if (user != null && PasswordUtil.check(password,user.getPassword())) {
        HttpSession session = request.getSession(true);
        session.setAttribute(Constant.USER_SESSION,user.getUsername());
        return Response.success("登錄成功");
    }
    return Response.fail("用戶名密碼錯(cuò)誤");
}

從Redis中讀取代碼

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HttpSession session = request.getSession(false);
    if (session != null && session.getAttribute(Constant.USER_SESSION) != null) {
        return true;
    }
    response.sendRedirect("/login.html");
    return false;
}

SSH隧道

在本地編寫代碼需要用到服務(wù)器上的Redis的時(shí)候需要開放端口,但Redis的端口一旦暴露到了公網(wǎng)就會(huì)非常危險(xiǎn),容易被黑客入侵。修改端口掩耳盜鈴可以是可以,但更好的做法是使用SSH端口轉(zhuǎn)發(fā)。SSH默認(rèn)是走22端口,SSH功能非常強(qiáng)大,其中端口轉(zhuǎn)發(fā)就是其中很重要的一個(gè)特性。相當(dāng)于通過SSH的22號(hào)端口,來傳遞其他端口的數(shù)據(jù)。

本身我們是通過windows主機(jī)訪問云服務(wù)器的6379端口,于是就構(gòu)造了一個(gè)特殊的SSH數(shù)據(jù)報(bào),就把要訪問redis的請(qǐng)求,放到了SSH 數(shù)據(jù)報(bào)里。這個(gè)數(shù)據(jù)就會(huì)通過22號(hào)端口發(fā)送給服務(wù)器,服務(wù)器的SSH服務(wù)器程序,就能夠解析出上訴的數(shù)據(jù)報(bào),然后把這個(gè)數(shù)據(jù)報(bào)交給6379端口的程序。

  # 設(shè)置Redis服務(wù)器的主機(jī)地址
  spring.redis.host=127.0.0.1
  # 指定Redis服務(wù)器的密碼
  spring.redis.password=
  # 指定Redis服務(wù)器的端口號(hào)
  spring.redis.port=8888

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

相關(guān)文章

  • Redis使用元素刪除的布隆過濾器來解決緩存穿透問題

    Redis使用元素刪除的布隆過濾器來解決緩存穿透問題

    本文主要介紹了Redis使用元素刪除的布隆過濾器來解決緩存穿透問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解Redis瘦身指南

    詳解Redis瘦身指南

    Redis應(yīng)該是開發(fā)者最常用的緩存服務(wù)器了,它豐富的數(shù)據(jù)結(jié)構(gòu),快速高效的內(nèi)存操作能幫助開發(fā)者迅速完成復(fù)雜功能的設(shè)計(jì),作為一個(gè)內(nèi)存型數(shù)據(jù)庫,Redis經(jīng)常會(huì)遇到內(nèi)存問題,今天我們來談一下Redis常見的內(nèi)存滿的問題,介紹一下給 Redis “瘦身”的通用方式。
    2021-05-05
  • Java實(shí)現(xiàn)多級(jí)緩存的方法詳解

    Java實(shí)現(xiàn)多級(jí)緩存的方法詳解

    對(duì)于高并發(fā)系統(tǒng)來說,有三個(gè)重要的機(jī)制來保障其高效運(yùn)行,它們分別是:緩存、限流和熔斷,所以本文就來和大家探討一下多級(jí)緩存的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助
    2024-02-02
  • 基于Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼

    基于Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼

    消息隊(duì)列在分布式系統(tǒng)中非常重要,能夠有效解耦系統(tǒng)的各個(gè)模塊,提供異步處理能力和緩沖能力,本文介紹了基于Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼,感興趣的可以了解一下
    2025-04-04
  • 使用Redis實(shí)現(xiàn)記錄訪問次數(shù)的三種方案

    使用Redis實(shí)現(xiàn)記錄訪問次數(shù)的三種方案

    這篇文章主要介紹了使用Redis實(shí)現(xiàn)記錄訪問次數(shù)的三種方案,文中通過代碼示例和圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-09-09
  • 淺談為什么單線程的redis那么快

    淺談為什么單線程的redis那么快

    本文主要介紹了為什么單線程的redis那么快,主要介紹了幾點(diǎn)原因,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 徹底弄懂Redis的LRU淘汰策略

    徹底弄懂Redis的LRU淘汰策略

    本文主要介紹了LRU淘汰策略以及實(shí)現(xiàn)一個(gè)LRU算法,文章會(huì)結(jié)合圖解循序漸進(jìn)的講解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • redis如何設(shè)置key的有效期

    redis如何設(shè)置key的有效期

    這篇文章主要介紹了redis如何設(shè)置key的有效期方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表

    redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表

    這篇文章主要介紹了redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表,壓縮列表是列表list和hash數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)之一,是redis為了節(jié)約內(nèi)存而開發(fā)的,由一系列特殊編碼的連續(xù)內(nèi)存塊組成的順序型數(shù)據(jù)結(jié)構(gòu),下面詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • 使用Redis防止重復(fù)發(fā)送RabbitMQ消息的方法詳解

    使用Redis防止重復(fù)發(fā)送RabbitMQ消息的方法詳解

    今天遇到一個(gè)問題,發(fā)送MQ消息的時(shí)候需要保證不會(huì)重復(fù)發(fā)送,注意不是可靠到達(dá),這里保證的是不會(huì)生產(chǎn)多條一樣的消息,所以本文主要介紹了使用Redis防止重復(fù)發(fā)送RabbitMQ消息的方法,需要的朋友可以參考下
    2025-01-01

最新評(píng)論