SpringBoot集成Redis、SpringCache

1 Redis介紹

1.1 Redis作為緩存

由于Redis的存取效率非常高,在開發實踐中,通常會將一些數據從關系型數據庫(例如MySQL)中讀取出來,并寫入到Redis中,后續當需要訪問相關數據時,將優先從Redis中讀取所需的數據,以此,可以提高數據的讀取效率,并且對一定程度的保護關系型數據庫。

一旦使用Redis后,相關的數據就會同時存在于關系型數據和Redis中,即同一個數據有2份或更多(如果你使用了更多的Redis服務或其它數據處理技術),則可能出現數據不同步的問題!

1.2 數據一致性問題

如果最終出現了關系型數據庫和Redis中的數據不同的問題,則稱之為“數據一致性問題

  • 更新數據庫成功 -> 更新緩存失敗 -> 數據不一致

  • 更新緩存成功 -> 更新數據庫失敗 -> 數據不一致

1.3 redis緩存使用場景

  • 高頻率訪問的數據

    • 例如熱門榜單
  • 修改頻率非常低的數

    • 例如商品的類別
  • 對于數據的“準確性”要求不高的

    • 例如商品的庫存余量(因為不管余量為多少,只有真正付款的時候才會去判斷是否買到)

1.4 redis使用緩存的時機

關于在項目中應用Redis,首先考慮何時將MySQL中的數據讀取出來并寫入到Redis中!常見的策略有:

1 直接嘗試從Redis中讀取數據,如果Redis中無此數據,則從MySQL中讀取并寫入到Redis

從運行機制上,類似于單例模式中的懶漢式

2 當項目啟動時,就直接從MySQL中讀取數據并寫入到Redis

從運行機制上,類似于單例模式中的餓漢式

這種做法通常稱之為“緩存預熱”當使用緩存預熱的處理機制時,需要使得某段代碼是項目啟動時就自動執行的,可以自定義組件類實現AppliacationRunner接口,重寫其中的run( )方法,此方法將在項目啟動完成之后自動調用。


2 SpringBoot集成Redis

2.1 安裝redis

地址Releases · microsoftarchive/redis · GitHub

2.2 在springboot中引入依賴

<!--集成redis-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.7.18</version>
</dependency>

2.3 添加redis配置信息

# spring配置
spring:redis:database: 0      # redis數據庫索引(默認為0)host: localhostport: 6379timeout: 5000    # mspassword: 123456

2.4 編寫redis配置類、工具類

/*** redis配置*/
@Configuration
@AutoConfigureBefore(RedissonAutoConfiguration.class)
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {// 創建 RedisTemplate 對象RedisTemplate<String, Object> template = new RedisTemplate<>();// 設置 RedisConnection 工廠。?? 它就是實現多種 Java Redis 客戶端接入的秘密工廠。感興趣的胖友,可以自己去擼下。template.setConnectionFactory(factory);// 使用 String 序列化方式,序列化 KEY 。template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());// 使用 JSON 序列化方式(庫是 Jackson ),序列化 VALUE 。template.setValueSerializer(RedisSerializerUtils.getSerializer());template.setHashValueSerializer(RedisSerializerUtils.getSerializer());return template;}}
public class RedisSerializerUtils {privat

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

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

相關文章

靜態路由綜合配置實驗報告

一、實驗拓撲二、實驗需求1.除了R5的環回地址固定5.5.5.0/24&#xff0c;其他網段基于192.168.1.0/24進行合理劃分&#xff1b;2.R1-R4每個路由器存在兩個環回接口&#xff0c;模擬PC&#xff0c;地址也在192.168.1.0/24網絡內&#xff1b;3.R1-R4不能直接編寫到達5.5.5.0/24的…

【一起來學AI大模型】PyTorch DataLoader 實戰指南

DataLoader 是 PyTorch 中處理數據的核心組件&#xff0c;它提供了高效的數據加載、批處理和并行處理功能。下面是一個全面的 DataLoader 實戰指南&#xff0c;包含代碼示例和最佳實踐。基礎用法&#xff1a;簡單數據加載import torch from torch.utils.data import Dataset, D…

SpringBoot單元測試類拿不到bean報空指針異常

原代碼package com.atguigu.gulimall.product;import com.aliyun.oss.OSSClient; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; impo…

持續集成 簡介環境搭建

1. 持續集成簡介 1.1 持續集成的作用 隨著互聯網的蓬勃發展,軟件生命周期模型也經歷了幾個比較大的階段,從最初的瀑布模型,到 V 模型,再到現在的敏捷或者 devops,不論哪個階段,項目從立項到交付幾乎都離不開以下幾個過程,開發、構建、測試和發布,而且一直都在致力于又…

關于 java:11. 項目結構、Maven、Gradle 構建系統

一、Java 項目目錄結構標準1.1 Java 項目標準目錄結構總覽標準 Java 項目目錄結構&#xff08;以 Maven / Gradle 通用結構為基礎&#xff09;&#xff1a;project-root/ ├── src/ │ ├── main/ │ │ ├── java/ # 主業務邏輯代碼&#xff08;核心…

大數據的安全挑戰與應對

在大數據時代&#xff0c;大數據安全問題已成為開發者最為關注的核心議題之一。至少五年來&#xff0c;大數據已融入各類企業的運營體系&#xff0c;而采用先進數據分析解決方案的組織數量仍在持續增長。本文將明確當前市場中最關鍵的大數據安全問題與威脅&#xff0c;概述企業…

PostgreSQL ERROR: out of shared memory處理方式

系統允許的總鎖數 SELECT (SELECT setting::int FROM pg_settings WHERE name max_locks_per_transaction) * (SELECT setting::int FROM pg_settings WHERE name max_connections) (SELECT setting::int FROM pg_settings WHERE name max_prepared_transactions);當鎖大于…

Django 模型(Model)

1. 模型簡介 ORM 簡介 MVC 框架中一個重要的部分就是 ORM,它實現了數據模型與數據庫的解耦,即數據模型的設計不需要依賴于特定的數據庫,通過簡單的配置就可以輕松更換數據庫。即直接面向對象操作數據,無需考慮 sql 語句。 ORM 是“對象-關系-映射”的簡稱,主要任務是:…

深入解析Hadoop RPC:技術細節與推廣應用

Hadoop RPC框架概述在分布式系統的核心架構中&#xff0c;遠程過程調用&#xff08;RPC&#xff09;機制如同神經網絡般連接著各個計算節點。Hadoop作為大數據處理的基石&#xff0c;其自主研發的RPC框架不僅支撐著內部組件的協同運作&#xff0c;更以獨特的工程哲學詮釋了分布…

為什么玩游戲用UDP,看網頁用TCP?

故事場景&#xff1a;兩種不同的遠程溝通方式假設你需要和遠方的朋友溝通一件重要的事情。方式一&#xff1a;TCP — 打一個重要的電話打電話是一種非常嚴謹、可靠的溝通方式。? 1. 建立連接 (三次握手):? 你拿起電話&#xff0c;撥號&#xff08;SYN&#xff09;。? 朋友那…

【EGSR2025】材質+擴散模型+神經網絡相關論文整理隨筆(二)

High-Fidelity Texture Transfer Using Multi-Scale Depth-Aware Diffusion 這篇文章可以從一個帶有紋理的幾何物體出發&#xff0c;將其身上的紋理自動提取并映射到任意的幾何拓撲結構上&#xff08;見下圖紅線左側&#xff09;&#xff1b;或者從一個白模幾何對象出發&#x…

深度學習圖像分類數據集—玉米粒質量識別分類

該數據集為圖像分類數據集&#xff0c;適用于ResNet、VGG等卷積神經網絡&#xff0c;SENet、CBAM等注意力機制相關算法&#xff0c;Vision Transformer等Transformer相關算法。 數據集信息介紹&#xff1a;玉米粒質量識別分類&#xff1a;[crush, good, mul] 訓練數據集總共有3…

Unity VR手術模擬系統架構分析與數據流設計

Unity VR手術模擬系統架構分析與數據流設計 前言 本文將深入分析一個基于Unity引擎開發的多人VR手術模擬系統。該系統采用先進的網絡架構設計&#xff0c;支持多用戶實時協作&#xff0c;具備完整的手術流程引導和精確的工具交互功能。通過對系統架構和數據管道的詳細剖析&…

【Spring Boot】Spring Boot 4.0 的顛覆性AI特性全景解析,結合智能編碼實戰案例、底層架構革新及Prompt工程手冊

Spring Boot 4.0 的顛覆性AI特性全景解析&#xff0c;結合智能編碼實戰案例、底層架構革新及Prompt工程手冊一、Spring Boot 4.0 核心AI能力矩陣二、AI智能編碼插件實戰&#xff08;Spring AI Assistant&#xff09;1. 安裝與激活2. 實時代碼生成場景3. 缺陷預測與修復三、AI引…

audiobookshelf-web 項目怎么運行

git clone https://github.com/audiobookshelf/audiobookshelf-web.git cd audiobookshelf-web npm i 啟動項目 npm run dev http://localhost:3000/

掃描文件 PDF / 圖片 糾斜 | 圖片去黑邊 / 裁剪 / 壓縮

問題&#xff1a;掃描后形成的 PDF 或圖片文檔常存在變形傾斜等問題&#xff0c;手動調整頗為耗時費力。 一、PDF 糾斜 - Adobe Acrobat DC 1、所用功能 掃描和 OCR&#xff1a; 識別文本&#xff1a;在文件中 → 設置 確定后啟動掃描&#xff0c;識別過程中自動糾偏。 2、…

適配器模式:兼容不兼容接口

將一個類的接口轉換成客戶端期望的另一個接口&#xff0c;解決接口不兼容問題。代碼示例&#xff1a;// 目標接口&#xff08;客戶端期望的格式&#xff09; interface ModernPrinter {void printDocument(String text); }// 被適配的舊類&#xff08;不兼容&#xff09; class…

流程控制:從基礎結構到跨語言實踐與優化

流程控制 一、流程控制基礎概念與核心價值 &#xff08;一&#xff09;流程控制定義與本質 流程控制是通過特定邏輯結構決定程序執行順序的機制&#xff0c;核心是控制代碼運行路徑&#xff0c;包括順序執行、條件分支、循環迭代三大核心邏輯。其本質是將無序的指令集合轉化為有…

Http與Https區別和聯系

一、HTTP 詳解 HTTP&#xff08;HyperText Transfer Protocol&#xff09;?? 是互聯網數據通信的基礎協議&#xff0c;用于客戶端&#xff08;瀏覽器&#xff09;與服務器之間的請求-響應交互 核心特性??&#xff1a; 1.無連接&#xff08;Connectionless&#xff09;??…

飛算JavaAI:開啟 Java 開發 “人機協作” 新紀元

每日一句 明天是新的一天&#xff0c; 你也不再是昨天的你。 目錄每日一句一、需求到架構&#xff1a;AI深度介入開發“源頭設計”1.1 需求結構化&#xff1a;自然語言到技術要素的精準轉化1.2 架構方案生成&#xff1a;基于最佳實踐的動態適配二、編碼全流程&#xff1a;從“…