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

SpringBoot使用Redis存儲Session實踐

 更新時間:2026年02月06日 15:48:32   作者:小福尼學(xué)編程  
本文介紹了Session的基本概念、工作流程和常見應(yīng)用場景,并詳細解釋了如何在JavaServlet中使用Session,接著,文章討論了Redis存儲Session的優(yōu)勢和配置方法,并提供了一個示例代碼,最后,總結(jié)了如何使用Redis存儲Session以及注意事項

Session的基本概念

Session(會話)是一種在客戶端與服務(wù)器之間維持狀態(tài)的機制。它允許服務(wù)器在多個請求之間存儲用戶的數(shù)據(jù),以便用戶可以在訪問網(wǎng)站或應(yīng)用時維持某種程度的連續(xù)性和個性化體驗。

以下是對 session 的詳細解釋:

  • -會話的定義: 會話指的是用戶與服務(wù)器之間的一系列互動。通常從用戶登錄開始,到用戶退出或會話過期結(jié)束。
  • -目的: 主要用于在用戶的多個請求之間保持狀態(tài)。這對于存儲用戶登錄狀態(tài)(十天免登錄)、購物車內(nèi)容、用戶設(shè)置等非常重要。

Session的工作流程

  • 用戶請求: 用戶訪問網(wǎng)站或應(yīng)用時,服務(wù)器會創(chuàng)建一個新的 session。
  • 生成 Session ID: 服務(wù)器生成一個唯一的 session ID(會話標識符),這個 ID 用于標識用戶的會話。
  • 存儲 Session 數(shù)據(jù):服務(wù)器會將與用戶會話相關(guān)的數(shù)據(jù)存儲在服務(wù)器端,可以是內(nèi)存、數(shù)據(jù)庫、Redis 等。
  • 發(fā)送 Session ID: 服務(wù)器將session ID 發(fā)送到客戶端,通常是通過 cookie??蛻舳嗽诤罄m(xù)請求中會帶上這個 ID。
  • 維護會話狀態(tài):在用戶進行后續(xù)請求時,服務(wù)器通過 session ID 找到對應(yīng)的會話數(shù)據(jù),繼續(xù)處理用戶請求。
  • 會話結(jié)束:用戶注銷或會話超時后,會話數(shù)據(jù)會被銷毀或標記為無效。

在Java Servlet中

  • request.getSession(false) -> 是指獲取當前請求的會話時,如果沒有獲取到會話就不會創(chuàng)建一個新的會話,而是直接返回null
  • request.getSession(true) 或者是 request.getSession() -> 是指如果請求的會話不存在,就創(chuàng)建一個新的,Java Servlet的getSession方法是默認為true的

Session的常見應(yīng)用場景

  • 用戶認證: 記錄用戶的登錄狀態(tài),確保用戶在會話期間不需要重新登錄。
  • 個性化設(shè)置: 存儲用戶的個性化設(shè)置或偏好,以提供個性化的體驗。
  • 購物車: 在電商網(wǎng)站中,存儲購物車的內(nèi)容。

Session的存儲方式

  • 內(nèi)存: 在服務(wù)器內(nèi)存中存儲會話數(shù)據(jù)(適用于小型應(yīng)用或負載較低的環(huán)境)。
  • 數(shù)據(jù)庫: 將會話數(shù)據(jù)存儲在數(shù)據(jù)庫中(適用于需要持久化存儲和較高的數(shù)據(jù)可靠性的環(huán)境)。
  • Redis: 使用 Redis 這種內(nèi)存數(shù)據(jù)庫來存儲會話數(shù)據(jù)(適用于高性能需求的場景)。
  • 文件系統(tǒng): 將會話數(shù)據(jù)存儲在服務(wù)器的文件系統(tǒng)中(通常不太常見)。

接下來進入正題Redis存儲Session

Redis存儲Session

Redis存儲Session的優(yōu)勢

高性能

  • 內(nèi)存存儲:Redis 是一個內(nèi)存數(shù)據(jù)庫,數(shù)據(jù)存儲在 RAM(隨機存取存儲器) 中,這使得讀寫操作非??焖?,比傳統(tǒng)的磁盤存儲要快得多。
  • 低延遲:Redis 的數(shù)據(jù)結(jié)構(gòu)操作非常高效,支持秒級的響應(yīng)時間,這對于需要快速會話訪問的應(yīng)用程序至關(guān)重要。

可擴展性

  • 水平擴展: Redis 支持集群模式,可以通過將數(shù)據(jù)分布在多個 Redis 實例上來水平擴展。這意味著可以處理更多的會話數(shù)據(jù)和更高的負載。
  • 持久化選項: Redis 提供了多種持久化機制(如 RDB 快照和 AOF 追加文件),可以在一定程度上保證數(shù)據(jù)的持久性,同時保持較高的性能。

豐富的數(shù)據(jù)結(jié)構(gòu)

  • 數(shù)據(jù)結(jié)構(gòu)支持: Redis 支持豐富的數(shù)據(jù)結(jié)構(gòu)(如字符串、哈希、列表、集合、有序集合等),這些數(shù)據(jù)結(jié)構(gòu)可以更靈活地存儲和操作會話數(shù)據(jù)。
  • 過期策略: Redis 內(nèi)置了高效的過期策略,可以自動清理過期的會話數(shù)據(jù),避免占用過多內(nèi)存。

高效的內(nèi)存管理

  • 內(nèi)存優(yōu)化: Redis 提供了多種內(nèi)存管理選項,如 LRU(最近最少使用)驅(qū)逐策略,確保在內(nèi)存有限的情況下優(yōu)先保留最常訪問的數(shù)據(jù)。
  • 壓縮和編碼: Redis 支持數(shù)據(jù)壓縮和編碼,以減少存儲空間和提高性能。

Spring Boot實現(xiàn)Redis存儲

導(dǎo)入依賴

	 <!--Redis存儲Session的依賴-->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
	<!--Spring Boot 的 Redis依賴-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

修改application配置文件

spring:
  data:
    redis:
      port: 6379
      host: localhost
      database: 1 #修改存儲數(shù)據(jù)的redis庫
  session:
    timeout: 86400 #session的過期時間
    store-type: redis #session 的存儲位置

完成上述配置就可以將session存入redis了

接下來寫一個示例代碼

@PostMapping("/login")
    public String login(HttpServletRequest request){
        String sessionUser = "session存儲進來了";
       	request.getSession().setAttribute("session",sessionUser );
        return "session存儲成功";
    }

這是沒有存儲之前的Redis

這是存儲之后的Redis

存儲進Redis的數(shù)據(jù)會亂碼是因為Redis 默認以二進制安全的方式存儲數(shù)據(jù)因此,確保在存儲和讀取數(shù)據(jù)時使用一致的編碼格式非常重要。如果存儲時使用了不同的編碼格式或數(shù)據(jù)序列化方法,讀取時可能會出現(xiàn)亂碼問題。確保你的應(yīng)用在存儲和讀取 session 數(shù)據(jù)時使用相同的編碼和序列化方式,比如 JSON 或二進制序列化,并確保數(shù)據(jù)的一致性。

上述查看Redis的應(yīng)用是QuickRedis,這個軟件可以快速查看Redis中的所有數(shù)據(jù)

如果之后要修改Redis中的session數(shù)據(jù)就重新setAttribute一次就可以了,這樣就會修改Redis中的session數(shù)據(jù)

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

最新評論

循化| 沧州市| 新和县| 海丰县| 海安县| 峨眉山市| 土默特左旗| 金阳县| 册亨县| 安远县| 台州市| 南陵县| 新绛县| 彭水| 林州市| 白玉县| 临颍县| 临沧市| 南宁市| 雷波县| 新干县| 天气| 崇文区| 汽车| 阳原县| 徐水县| 潞城市| 余庆县| 兰西县| 中卫市| 华阴市| 达州市| 大田县| 清涧县| 泰来县| 泸西县| 奈曼旗| 天门市| 临江市| 阆中市| 定西市|