spring-boot-starter-data-redis應用詳解

在這里插入圖片描述


一、依賴引入與基礎配置

  1. 添加依賴
    pom.xml 中引入 Spring Data Redis 的 Starter 依賴,默認使用 Lettuce 客戶端:

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- 連接池支持 -->
    <dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId>
    </dependency>
    
  2. 連接配置
    application.yml 中配置 Redis 服務器信息及連接池參數:

    spring:redis:host: localhostport: 6379password: 123456  # 可選database: 0lettuce:pool:max-active: 16    # 最大活躍連接數max-idle: 8       # 最大空閑連接min-idle: 2       # 最小空閑連接max-wait: 5000ms  # 等待超時時間
    

二、核心功能與基本操作

  1. RedisTemplate 與序列化
    ? 默認序列化問題:默認使用 JDK 序列化,存儲二進制數據不可讀。

    ? 自定義序列化:改用 JSON 或字符串序列化:

    @Configuration
    public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setKeySerializer(RedisSerializer.string());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setConnectionFactory(factory);return template;}
    }
    
  2. 數據結構操作
    通過 RedisTemplate 支持多種 Redis 數據結構:
    ? 字符串(String):

    redisTemplate.opsForValue().set("key", "value", 60, TimeUnit.SECONDS);  // 帶過期時間
    String value = redisTemplate.opsForValue().get("key");
    

    ? 哈希(Hash):

    redisTemplate.opsForHash().put("user:1001", "name", "Alice");
    Object name = redisTemplate.opsForHash().get("user:1001", "name");
    

    ? 列表(List):

    redisTemplate.opsForList().rightPush("listKey", "item1");
    List<Object> items = redisTemplate.opsForList().range("listKey", 0, -1);
    

三、高級特性與優化

  1. 緩存管理
    ? 啟用緩存注解:通過 @EnableCaching@Cacheable 實現聲明式緩存:

    @Cacheable(value = "userCache", key = "#id")
    public User getUserById(Long id) { ... }
    

    ? 自定義緩存配置:指定 TTL(過期時間)和緩存條件。

  2. 事務與管道(Pipeline)
    ? 事務操作:通過 SessionCallback 實現原子性操作:

    redisTemplate.execute(new SessionCallback<>() {@Overridepublic List<Object> execute(RedisOperations operations) {operations.multi();operations.opsForValue().set("key1", "value1");operations.opsForValue().set("key2", "value2");return operations.exec();}
    });
    

    ? 管道批量操作:提升網絡性能:

    redisTemplate.executePipelined((RedisCallback<Object>) connection -> {connection.stringCommands().set("key1".getBytes(), "value1".getBytes());connection.stringCommands().set("key2".getBytes(), "value2".getBytes());return null;
    });
    
  3. 異步與響應式編程
    ? Lettuce 異步 API:非阻塞操作提升并發性能:

    RedisAsyncCommands<String, String> asyncCommands = lettuceConnection.async();
    RedisFuture<String> future = asyncCommands.get("key");
    future.thenAccept(System.out::println);
    

四、常見問題與解決方案

  1. 序列化不一致
    ? 問題:默認 JDK 序列化導致存儲數據不可讀。

    ? 解決:使用 StringRedisTemplate 或自定義 JSON 序列化。

  2. 連接池配置優化
    ? 參數調優:根據并發量調整 max-activemax-idle,避免資源耗盡。

  3. 緩存穿透與雪崩
    ? 穿透:緩存空值或布隆過濾器攔截非法請求。

    ? 雪崩:分散過期時間或使用分布式鎖。


五、生產環境建議

  1. 監控與診斷
    ? 使用 Redis Desktop Manager 或 Prometheus 監控連接池狀態與性能指標。

  2. 高可用部署
    ? 結合 Redis Sentinel 或 Cluster 實現高可用。


總結

spring-boot-starter-data-redis 通過簡化的配置和強大的 RedisTemplate 抽象,為開發者提供了高效的 Redis 集成方案。合理配置序列化與連接池參數,結合事務、管道等高級特性,可顯著提升應用性能。對于大規模生產環境,建議進一步整合 Redis 集群與監控工具以實現高可用與穩定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82550.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82550.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82550.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全能郵箱全能郵箱:實現郵件管理的自動化!

全能郵箱全能郵箱&#xff1a;實現郵件管理的自動化&#xff01; 全能郵箱全能郵箱的配置教程&#xff1f;如何注冊烽火域名郵箱&#xff1f; 全能郵箱全能郵箱作為一種創新的郵件管理解決方案&#xff0c;正逐漸改變我們處理郵件的方式。蜂郵EDM將圍繞全能郵箱全能郵箱&…

Real2Render2Real:無需動力學仿真或機器人硬件即可擴展機器人數據

25年5月來自UC Berkeley 和 TRI 的論文“Real2Render2Real: Scaling Robot Data Without Dynamics Simulation or Robot Hardware”。 擴展機器人學習需要大量且多樣化的數據集。然而&#xff0c;現行的數據收集范式——人類遙操作——仍然成本高昂&#xff0c;且受到手動操作…

Cadence學習筆記之---PCB的布線與鋪銅

目錄 01 | 引 言 02 | 環境描述 03 | 布 線 04 | 鋪 銅 05 | 總 結 01 | 引 言 在上一篇文章中介紹了Cadence元件放置和布局相關的操作方法和步驟&#xff0c;當完成全部的器件布局后&#xff0c;就可以進行下一步&#xff1b; 本篇文章主要介紹Cadence中布線和鋪銅相關的…

redis-7.4.2 通過 systemd管理,rpmbuild spec文件參考

redis-7 和 redis 5 版本在配置為systemd 方式管理時&#xff0c;配置關于有些許區別&#xff0c;否則會報systemctl status redis 如下錯誤&#xff1a; redis.service: control process exited, codeexited status1 Failed to start Redis persistent key-value database. Un…

2025-05-26 什么是“AI 全棧”

AI全棧&#xff1a;模型 表示學習 向量庫 API UI 一句話定義&#xff1a; ? AI 全棧開發&#xff0c;是指開發者從原始文本/語音/圖像開始&#xff0c;結合大模型能力&#xff0c;構建完整應用閉環的技術能力棧。 AI全棧應用的過程 AI應用 ≠ 一個GPT接口&#xff0c;…

康師傅的“價值戰”答卷:一碗面的創新與擔當

低價策略、口味雷同、營銷跟風……方便面行業曾長期陷于同質化競爭的泥潭&#xff0c;不過近年來&#xff0c;行業競爭邏輯已悄然改變。 一方面來源于宏觀環境的變化&#xff0c;想要在縮量市場下保住大盤&#xff0c;一定要保持逆向思維的能力&#xff0c;另一方面&#xff0…

高性能管線式HTTP請求

高性能管線式HTTP請求:原理、實現與實踐 目錄 高性能管線式HTTP請求:原理、實現與實踐 1. HTTP管線化的原理與優勢 1.1 HTTP管線化的基本概念 關鍵特性: 1.2 管線化的優勢 1.3 管線化的挑戰 2. 高性能管線式HTTP請求的實現方案 2.1 技術選型與工具 2.2 Java實現:…

傳輸線上的信號速度與阻抗無關,主要由頻率決定

阻抗與傳播速度無關 通過計算我們可以知道&#xff0c;導體流過電流時&#xff0c;電子實際上的速度只有1cm/s。是很慢的。 導線的電阻對傳輸線上信號的傳播速度幾乎沒有任何影響。只在一些極端的情況下&#xff0c;互連的電阻才會影響信號的傳播速度&#xff0c;并且這個影響…

YOLOv1 詳解:單階段目標檢測算法的里程碑

在目標檢測領域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法憑借其高效性和實用性&#xff0c;成為了行業內的明星算法。其中&#xff0c;YOLOv1 作為 YOLO 系列的開山之作&#xff0c;首次提出了單階段目標檢測的思想&#xff0c;徹底改變了目標檢測算…

免費開源 PDF 閱讀器 自帶虛擬打印機功能 多格式兼容

各位辦公小能手們&#xff0c;今天咱來聊聊一款超厲害的PDF工具——PDFLite&#xff01; 這PDFLite啊&#xff0c;那可是輕量級、免費又開源的好東西。它能干啥呢&#xff1f;主要就是能讀PDF文件&#xff0c;還能轉換文件格式&#xff0c;做基礎的文檔管理。下面咱就說說它的…

Mac Python 安裝依賴出錯 error: externally-managed-environment

Mac Python 使用 ip3 install -r requirements.txt 出錯 This environment is externally managed ╰─> To install Python packages system-wide, try brew installxyz, where xyz is the package you are trying toinstall.If you wish to install a Python library th…

Windows11+WSL2+Ubuntu22 安裝

1.首先要獲得管理員權限 2.直接在電腦搜索欄搜索 “Turn Windows features on or off”, 勾選下面兩個條目&#xff1a; Virtual Machine Platform 和 Windows Subsystem for Linux 3.重啟電腦 4.電腦搜索欄搜索“Windows PowerShell”&#xff0c;運行下面命令設置WSL2為默…

解決 iTerm2 中 nvm 不生效的問題(Mac 環境)

解決 iTerm2 中 nvm 不生效的問題&#xff08;Mac 環境&#xff09; 標題 《為什么 iTerm2 無法使用 nvm&#xff1f;—— 解決 Mac 終端環境變量沖突指南》 問題描述 許多開發者在 Mac 上使用 nvm 管理 Node.js 版本時&#xff0c;發現&#xff1a; 原生終端&#xff1a;n…

React的單向數據綁定

文章目錄 單項數據綁定通過onChange方法&#xff0c;實現雙向數據綁定 單項數據綁定 在 Vue 中&#xff0c;可以通過 v-model 指令來實現雙向數據綁定。但是&#xff0c;在 React 中并沒有指令的概念&#xff0c;而且 React 默認不支持 雙向數據綁定。 React 只支持&#xff…

AWS関連職種向け:日本語面接QA集

1. 自己紹介&#xff08;じこしょうかい&#xff09; Q&#xff1a;簡単に自己紹介をお願いします。 A&#xff1a; はい、〇〇と申します。これまで約4年間、主にAWSを基盤としたインフラ設計?構築?運用に従事してまいりました。VPCやEC2、RDS、S3などの基本サービスの設計…

AlphaCore GPU 物理仿真引擎內測邀請

AlphaCore 是 MooreThreads 研發的下一代 GPU 物理仿真引擎&#xff0c;為影視特效&#xff0c;游戲交互&#xff0c;數字孿生等領域&#xff0c;提供超高精度的仿真模擬。 申請試用? 目前我們的Catalyst FX 還處于內部申請測試階段&#xff0c;請發送郵件至 alphacoremthre…

鴻蒙OSUniApp 實現的日期選擇器與時間選擇器組件#三方框架 #Uniapp

UniApp 實現的日期選擇器與時間選擇器組件 在移動應用開發中&#xff0c;日期選擇器和時間選擇器是表單、預約、日程、打卡等場景中不可或缺的基礎組件。一個好用的日期/時間選擇器不僅能提升用戶體驗&#xff0c;還能有效減少輸入錯誤。隨著 HarmonyOS&#xff08;鴻蒙&#…

嵌入式開發STM32 -- 江協科技筆記

1.背景介紹及基礎認知 8大輸入輸出 斯密特觸發器&#xff1a;高于設定閾值輸出高電平&#xff0c;低于設定閾值輸出低電平 有關上拉輸入、下拉輸入、推挽輸出、開漏輸出、復用開漏輸出、復用推挽輸出以及浮空輸入、模擬輸入的區別 1、上拉輸入&#xff1a;上拉就是把電位拉高…

RISC-V 開發板 MUSE Pi Pro RTSP 串流 CSI ov5647 攝像頭

視頻鏈接&#xff1a;RISC-V 開發板 MUSE Pi Pro RTSP 串流 CSI ov5647 攝像頭_嗶哩嗶哩_bilibili RISC-V 開發板 MUSE Pi Pro RTSP 串流 CSI ov5647 攝像頭 RTSP&#xff08;Real-Time Streaming Protocol&#xff0c;實時流傳輸協議&#xff09; 是一種基于文本的應用層協議&…

Python面試1

1. 解釋型語言和編譯型語言的區別 編譯型語言&#xff1a; 將程序編譯成二進制可執行程序&#xff08;C、C) 解釋型語言&#xff1a; 將程序逐行解釋運行&#xff08;python&#xff09; Java不是將源程序直接編譯機器語言&#xff0c;而是編譯成字節碼文件&#xff0c;然后用…