Spring Boot使用Redis常用場景

Spring Boot使用Redis常用場景


一、概述:Redis 是什么?為什么要用它?

Redis(Remote Dictionary Server)是一個內存中的數據存儲系統(類似一個“超級大字典”),它能存各種類型的數據(字符串、列表、哈希等),而且讀寫速度極快(因為數據存在內存里)。
簡單說,Redis 就像電腦的“緩存抽屜”:當你的程序需要頻繁讀取或修改某些數據時(比如用戶登錄信息、商品銷量),直接從 Redis 里拿,比從硬盤的數據庫(如 MySQL)里拿快 10 倍甚至 更多倍!

二、Redis 支持的數據類型(5種最常用)

Redis 能存很多種“結構”的數據,就像不同形狀的盒子,裝不同的東西:

類型特點舉例場景
字符串(String)最基礎類型,存文本或數字(比如 “張三” 或 “100”)存用戶手機號、商品庫存數量
哈希(Hash)類似“小字典”,存鍵值對的集合(比如 {“name”:“張三”, “age”:18})存用戶詳細信息、商品屬性
列表(List)有序的字符串列表(類似數組,可從左/右添加元素)存朋友圈動態列表、日志隊列
集合(Set)無序、不重復的字符串集合(類似數學里的集合)存用戶點贊的商品ID(去重)
有序集合(ZSet)類似集合,但每個元素有“分數”(按分數排序)存排行榜(比如積分排名)
三、Redis 的常見使用場景

Redis 能解決很多實際問題,最常用的 4 種場景:

  1. 緩存(最常用!):把高頻訪問的數據(比如商品詳情、首頁廣告)存到 Redis,減少數據庫查詢次數。
  2. 計數器:用 Redis 的 INCR 命令(類似 +1 操作)統計文章閱讀量、視頻播放量,比數據庫的 +1 快很多。
  3. 會話共享:多個服務器(比如 A 服務器和 B 服務器)共享用戶登錄狀態(存 Redis 里,不用每個服務器單獨存)。
  4. 分布式鎖:在秒殺活動中,用 Redis 保證同一時間只有 1 個請求能修改庫存(防止超賣)。
四、實際業務舉例:商品詳情頁緩存

需求:用戶訪問商品詳情頁時,先從 Redis 查緩存;如果沒有,再查數據庫,并把結果存到 Redis(避免頻繁查數據庫)。

實現步驟

  1. 用戶訪問商品詳情頁(比如商品ID是 1001);
  2. 程序先查 Redis 是否有 product:1001 的緩存;
  3. 如果有,直接返回緩存數據;
  4. 如果沒有,查 MySQL 數據庫,拿到商品詳情;
  5. 把商品詳情存到 Redis(設 30 分鐘過期),再返回給用戶。
@Service
public class ProductService {@Autowiredprivate ProductMapper productMapper;  // 操作數據庫的類(假設已定義)@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public Product getProductDetail(Long productId) {String key = "product:" + productId;// 1. 先查 Redis 緩存Product product = (Product) redisTemplate.opsForValue().get(key);if (product != null) {return product; // 緩存有數據,直接返回}// 2. 緩存沒有,查數據庫product = productMapper.selectById(productId); // 3. 把數據庫結果存到 Redis(設 30 分鐘過期)if (product != null) {redisTemplate.opsForValue().set(key, product, 30, TimeUnit.MINUTES);}return product;}
}
五、總結:使用 Redis 的注意事項
  1. 緩存過期時間:一定要給緩存設過期時間(比如 30 分鐘),否則 Redis 內存會被占滿!
  2. 避免緩存擊穿:高并發時,如果某個熱點緩存突然過期(比如秒殺商品),會導致大量請求同時查數據庫。可以用“分布式鎖”(比如 Redis 的 setIfAbsent 命令)保證只有 1 個請求查數據庫,其他請求等緩存更新。
  3. 數據一致性:如果數據庫數據修改了,要及時刪除或更新 Redis 里的舊緩存(比如用戶修改了商品價格,要刪除 product:1001 的緩存)。
  4. 內存監控:用 redis-cli 命令(或可視化工具如 RedisDesktopManager)監控內存使用情況,避免內存不足。

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

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

相關文章

CAD文件處理控件Aspose.CAD教程:在 C# 中將 DXF 文件轉換為 SVG - AutoCAD C# 示例

概述 使用 C# 輕松將DXF文件轉換為SVG。此轉換可更好地兼容 Web 應用程序&#xff0c;并增強 CAD 圖紙的視覺呈現效果。使用Aspose.CAD for .NET &#xff0c;開發人員可以輕松實現此轉換過程。該 SDK 提供強大的功能&#xff0c;使其成為 C# 開發人員的可靠選擇。Aspose.CAD …

Gitee 持續集成與交付(CI/CD)篇

Gitee 持續集成與交付&#xff08;CI/CD&#xff09;篇 &#x1f680; 文章目錄 Gitee 持續集成與交付&#xff08;CI/CD&#xff09;篇 &#x1f680;&#x1f3af; 什么是 CI/CD&#xff1f;&#x1f31f; Gitee Go 介紹? 核心特性&#x1f3a8; 支持的技術棧 &#x1f680;…

深度學習:PyTorch卷積神經網絡圖像分類案例分享

本文目錄&#xff1a; 一、了解CIFAR-10數據集二、案例之導包三、案例之創建數據集四、案例之搭建神經網絡&#xff08;模型構建&#xff09;五、案例之編寫訓練函數&#xff08;訓練模型&#xff09;六、案例之編寫預測函數&#xff08;模型測試&#xff09; 前言&#xff1a;…

記錄多功能按鍵第二種寫法使用定時器周期間隔判斷.

邏輯是通過定時器溢出周期進行判斷按下次數 比如設置定時器溢出周期為500MS,每次溢出都會判斷按鍵按下次數,如果下個周期前沒有觸發按下,則結束鍵值判斷.并確定觸發鍵值.清空按下次數標志.測試比一個定時器周期按下按鍵次數判斷寫法要穩定... 記錄STM32實現多功能按鍵_stm32一…

【安卓Sensor框架-1】SensorService 的啟動流程

內核啟動后&#xff0c;首個用戶空間進程init&#xff08;pid1&#xff09;解析init.rc配置文件&#xff0c;啟動關鍵服務&#xff08;如Zygote和ServiceManager&#xff09;。 Zygote服務配置為/system/bin/app_process --zygote --start-system-server&#xff0c;后續用于孵…

centos網卡綁定參考

同事整理分享&#xff1a; 1. 加載 Bonding 模塊 modprobe bonding 獲取網卡名稱 ip a 找到接了網線的網卡名稱&#xff0c;記下。 3. 配置物理網卡 創建并編輯 /etc/sysconfig/network-scripts/ifcfg-ens36&#xff08;ifcfg-后面的內容根據上面找到的具體網卡名稱決定&#…

mbedtls ssl handshake error,res:-0x2700

用LinkSDK.c連接第三方云平臺出現現象 解決方案&#xff1a; 在_tls_network_establish函數中加入 mbedtls_ssl_conf_authmode(&adapter_handle->mbedtls.ssl_config, MBEDTLS_SSL_VERIFY_NONE);原因解釋&#xff1a;用連接方式是不用證書認證/跳過服務端認證。

Spring Security 的方法級權限控制是如何利用 AOP 的?

Spring Security 的方法級權限控制是 AOP 技術在實際應用中一個極其強大的應用典范。它允許我們以聲明式的方式保護業務方法&#xff0c;將安全規則與業務邏輯徹底解耦。 核心思想&#xff1a;權限檢查的“門衛” 你可以把 AOP 在方法級安全中的作用想象成一個盡職盡責的“門…

一鍵內網穿透,無需域名和服務器,自動https訪問

cloudflare能將內網web轉為外網可訪問的地址。&#xff08;這和apiSQL有點類似&#xff0c;apiSQ可以將內網數據庫輕松轉換為外網的API&#xff0c;并且還支持代理內網已有API&#xff0c;增強安全增加API Key&#xff0c;以https訪問等等&#xff09; 但Cloudfalre tunnel這個…

Sentinel(二):Sentinel流量控制

一、Sentinel 流控規則基本介紹 1、Snetinel 流控規則配置方式 Sentinel 支持可視化的流控規則配置&#xff0c;使用非常簡單&#xff1b;可以在監控服務下的“簇點鏈路” 或 “流控規則” 中 給指定的請求資源配置流控規則&#xff1b;一般推薦在 “簇點鏈路” 中配置流控規則…

支持PY普冉系列單片機調試工具PY32linK仿真器

PY32 Link是專為 ?PY32系列ARM-Cortex內核單片機?&#xff08;如PY32F002A/030/071/040/403等&#xff09;設計的仿真器&#xff0c;支持全系列芯片的?調試和仿真?功能。?開發環境兼容性?支持主流IDE&#xff1a;?Keil MDK? 和 ?IAR Embedded Workbench?&#xff0c;…

深入解析Python多服務器監控告警系統:從原理到生產部署

深入解析Python多服務器監控告警系統&#xff1a;從原理到生產部署 整體架構圖 核心設計思想 無代理監控&#xff1a;通過SSH直接獲取數據&#xff0c;無需在目標服務器安裝代理故障隔離&#xff1a;單臺服務器故障不影響整體監控多級檢測&#xff1a;網絡層→資源層→服務層層…

JUC:10.線程、monitor管程、鎖對象之間在synchronized加鎖的流程(未完)

一、monitor管程工作原理&#xff1a; 首先&#xff0c;synchronized是一個對象鎖&#xff0c;當線程運行到某個臨界區&#xff0c;這個臨界區使用synchronized對對象obj進行了上鎖&#xff0c;此時底層發生了什么&#xff1f; 1.當synchronized對obj上鎖后&#xff0c;synch…

Elasticsearch(ES)分頁

Elasticsearch&#xff08;簡稱 ES&#xff09;本身不適合傳統意義上的“深分頁”&#xff0c;但提供了多種分頁方式&#xff0c;每種適用不同場景。我們來詳細講解&#xff1a; 一、基本分頁&#xff08;from size&#xff09; 最常用的分頁方式&#xff0c;類似 SQL 的 LIM…

原生微信小程序:用 `setData` 正確修改數組中的對象項狀態(附實戰技巧)

&#x1f4cc; 背景介紹 在微信小程序開發中&#xff0c;我們經常需要修改數組中某個對象的某個字段&#xff0c;比如&#xff1a; 列表中的某一項展開/收起多選狀態切換數據列表中的臨時標記等 一個常見的場景是&#xff1a; lists: [{ show: true }, { show: true }, { s…

Oracle 臨時表空間相關操作

一、臨時表空間概述 臨時表空間&#xff08;Temporary Tablespace&#xff09;是Oracle數據庫中用于存儲臨時數據的特殊存儲區域&#xff0c;其數據在會話結束或事務提交后自動清除&#xff0c;重啟數據庫后徹底消失。主要用途包括&#xff1a; 存儲排序操作&#xff08;如OR…

從靜態到動態:Web渲染模式的演進和突破

渲染模式有好多種&#xff0c;了解下web的各種渲染模式&#xff0c;對技術選型有很大的參考作用。 一、靜態HTML時代 早期&#xff08;1990 - 1995年&#xff09;網頁開發完全依賴手工編寫HTML&#xff08;HyperText Markup Language&#xff09;和CSS&#xff08;層疊樣式表…

Flask(六) 數據庫操作SQLAlchemy

文章目錄 一、準備工作二、最小化可運行示例? 補充延遲綁定方式&#xff08;推薦方式&#xff09; 三、數據庫基本操作&#xff08;增刪改查&#xff09;1. 插入數據&#xff08;增&#xff09;2. 查詢數據&#xff08;查&#xff09;3. 更新數據&#xff08;改&#xff09;4.…

PYTHON從入門到實踐7-獲取用戶輸入與while循環

# 【1】獲取用戶輸入 # 【2】python數據類型的轉換 input_res input("請輸入一個數字\n") if int(input_res) % 10 0:print("你輸入的數是10的倍數") else:print("你輸入的數不是10的倍數") # 【3】while循環&#xff0c;適合不知道循環多少次…

學習筆記(C++篇)—— Day 8

1.STL簡介 STL(standard template libaray-標準模板庫)&#xff1a;是C標準庫的重要組成部分&#xff0c;不僅是一個可復用的組件庫&#xff0c;而且是一個包羅數據結構與算法的軟件框架。 2.STL的六大組件 先這樣&#xff0c;下一部分是string的內容&#xff0c;內容比較多&a…