Redis(緩存)

一 什么是緩存

1. 生活上的例子

比如有一個行李箱和一個手機,每次把手機放到行李箱在拿出來肯定很麻煩,如果放到褲兜里就會方便很多,所以褲兜算作行李箱的一個緩存,不僅僅是褲兜,甚至可以一直拿在手上等其他有存儲介質的東西。

說白了緩存就是用來提高效率的,比如 內存 作為 CPU 和 外設 的緩存,和接下來要講的 Redis 作為 MySQL 的緩存,MySQL 和磁盤打交道,磁盤是外設 I/O 效率慢,并且是隨機尋址就更慢了,而 Redis 工作在內存,用來緩存 MySQL 的部分數據來分攤壓力再合適不過了。

二 緩存如何更新

1. 定期更新

顧名思義:每隔一段時間來對緩存進行更新,比如每個一段時間統計訪問頻率最多的 100 個單詞寫入到日志里,到了時間在同步到 Redis 進行緩存更新。

定期更新帶來的問題:隔的這段時間可能某些冷門詞突然就變高頻了,但是定期更新,所以無法及時更新到緩存里,導致繞過 Redis ,壓力就導到 MySQL 中了,為了解決這個問題引入實時更新。

2. 實時更新

顧名思義:只要查不到緩存,就去 MySQL 中查,查到了在放到緩存里。

Redis 是跑在內存中的,內存大小有限,且不止有 Redis 這一個服務在使用,所以一直更新就會導致 Redis 占用內存直到內存用盡,所以引入了緩存淘汰策略。

3. 淘汰策略
1. FIFO(先進先出)

先進緩存的先淘汰。

2. LRU(最久未訪問的)

最久未訪問的先淘汰。

3. LFU(最少訪問次數)

最少訪問次數的先淘汰。

4. Random(隨機淘汰)

隨機淘汰。

5. Redis 支持的淘汰選項:

Volation-LRU:在設置了過期的 Key 中淘汰最久未訪問的。

AllKeys-LRU:在所有的?Key 中淘汰最久未訪問的。

Volation-LFU:在設置了過期的 Key 中淘汰最少訪問次數的。

AllKeys-LFU:在所有的 Key 中淘汰最少訪問次數的。

AllKeys-Random:在設置了過期的 Key 中隨機淘汰。

Volation-Randon:在所有的 Key 中隨機淘汰。

Volation-TTL:在設置了過期的 Key 中淘汰越早過期的。

Noeviction(默認策略):沒有任何淘汰機制,寫超了直接報錯(不適用與實時更新)。

三 緩存使用事項

1. 緩存預熱

緩存更新采用實時更新的時候:

原因:

  • Redis 服務剛啟動,什么也沒有,壓力全部到 MySQL 中,并把查到的數據緩存到 Redis,一開始 MySQL 就會承擔大量的并發請求導致壓力過大。

解決辦法:

  • 最開始的時候把 定期更新 和 實時更新 相結合,先把預先的高頻日志導到 Redis,后續在采用實時更新,避免了一開始大量并發到 MySQL。

定期更新沒有緩存預熱的情況。

2. 緩存穿透

當查詢某些?Key,Redis MySQL 中都不存在,MySQL 壓力也會增大。

原因:

  • ?MySQL 刪除誤刪了數據。
  • ?Key 本身不合法。

解決辦法:

  • 對不合法的 Key 檢測。
  • 采用布隆過濾器提前檢測 Key 是否存在。
3. 緩存雪崩

某一時間端大量的 Key 失效,導致 MySQL 壓力過大。

原因:

  • 如果同一時間內設置了過期的?Key ,并且過期時間相同。
  • Redis 服務掛了。

解決辦法:

  • 過期時間添加其他因子避免過期時間相同。
  • 引入集群,哨兵自動管理掛掉的 Redis 服務器。
4. 緩存擊穿

某一時間端熱點 Key 失效,導致 MySQL 壓力過大,和緩存雪崩類似。

原因:

  • 和緩存雪崩類似。

解決辦法:

  • 熱點 Key 盡量不要設置過期時間。
  • 引入分布式鎖,訪問 MySQL 次數上限則鎖住,避免 MySQL 壓力過大。

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

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

相關文章

openssl簡介

一、openssl是什么 OpenSSL是一個開源的、功能強大的軟件庫和工具包,它實現了傳輸層安全(TLS) 和安全套接層(SSL) 協議以及一個全面的密碼學原語庫。它是用 C 語言編寫的,為其帶來了高性能和跨平臺的特性。 作為庫(Library):開發者可以將其代碼集成到自己的應用程序(…

左值引用與右值引用

左值和右值 左值(lvalue):在表達式結束后仍然存在,可以取地址。簡單理解:有名字、有存儲位置。 比如變量、數組元素、對象等。 右值(rvalue):臨時值,表達式結束后就消失&…

中小企業SAP B1 HANA部署全解析:成本與云端優勢

目錄 云端部署成本構成與效益分析 軟件許可費 硬件成本 服務費 培訓費 技術優勢 快速部署 彈性擴展 高可用性 云端部署適用場景 IT預算有限的中小企業 分布在不同地區的機構 需要快速上線的情況 本地部署適用場景 數據監管嚴格的行業 擁有完善IT基礎設施企業 …

Django Channels實戰:WebSocket實時通信開發

在當今Web應用開發中,實時通信功能已成為提升用戶體驗的關鍵要素。傳統的HTTP請求-響應模式難以滿足即時聊天、實時通知、協同編輯等場景的需求。本文將深入探討如何利用Django Channels框架實現WebSocket通信,為你的Django項目添加實時交互能力。為什么…

大數據畢業設計選題推薦-基于大數據的懂車帝二手車數據分析系統-Spark-Hadoop-Bigdata

?作者主頁:IT研究室? 個人簡介:曾從事計算機專業培訓教學,擅長Java、Python、微信小程序、Golang、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦??? Java項目 Python…

python 通過selenium調用chrome瀏覽器

更新selenium pip install -U selenium 下載瀏覽器和對應的驅動 Chrome for Testing availability 一般選穩定版本的,我是windows的就下win64的, 下載兩個zip包后,把chromedriver.zip中的exe解壓縮放到chrome_win64文件夾中 from selen…

Codeium:免費開源代碼自動補全工具,高效管理代碼片段告別開發卡殼

你有沒有過這種尷尬時刻?寫代碼時突然想不起來常用的函數寫法,比如 Python 的字典推導式,或者 MySQL 的聯表查詢語句,翻之前的項目文件翻半天,好不容易找到又得復制粘貼 —— 要是遇到換電腦,之前存的代碼片…

嵌入式系統學習Day35(sqlite3數據庫)

一.數據庫 1、分類:大型中型小型 ORACLEMYSQL/MSSQL : SQLITE DBll powdb 關系型數據庫 2、名詞: DB數據庫 select update database DBMS數據庫管理系統 MIS管理信息系統 OA辦公自動化 3、嵌入式數據庫: sqlite3www.sqlite.org www.kernal.…

無人機自組網系統的抗干擾技術分析

由多個無人機和地面組成的MESH自組網系統是一種去中心化的無線通信網絡 。系統由多個機載和地面通信終端構成,其核心特點是“無固定中心”,采用去中心化架構,所有節點地位平等 。在這種網狀結構中,所有通信節點都能直接相互通信&a…

mac 安裝 nginx

安裝 nginx :brew install nginx檢查 nginx 安裝是否成功:nginx -vnginx version: nginx/1.29.1查看 nginx 啟動狀態:sudo brew services info nginx可以看到服務還未啟動nginx (homebrew.mxcl.nginx)Running: ?Loaded: ?Schedulable: ?ng…

JP4-7-MyLesson后臺前端(四)

Java道經 - 項目 - MyLesson - 后臺前端(四) 傳送門:JP4-7-MyLesson后臺前端(一) 傳送門:JP4-7-MyLesson后臺前端(二) 傳送門:JP4-7-MyLesson后臺前端(三&am…

Linux control group筆記

Linux CGroup(Control Groups)是一個強大的內核功能,用于限制、記錄和隔離進程組(process groups)使用的系統資源(如 CPU、內存、磁盤 I/O、網絡等)。它通過將進程分組并對這些組進行資源分配和…

小迪Web自用筆記30

Node.js原生態的js運行在前端。Node.js:他與原生態JS最大的不同,就是前端只能看到輸出的代碼,而看不到jS文件req接收,res回顯dirname獲取絕對路徑提交表單 :“Post路由” 到底是什么。這是一個非常核心的Web開發概念。…

并發編程的守護者:信號量與日志策略模式解析

一、信號量 關于信號量的介紹在深入Linux內核:IPC資源管理揭秘 這篇文章當中已經做了初步的介紹了,相信大家對于信號量已經有了初步的認知了。 今天,我們就來探討如何實現信號量。 1. 信號量的接口 //初始化信號量 //成功了,返…

conda 創建環境嵌套報錯

使用conda create --prefix /path可以成功創建,有可能時默認路徑沖突導致的 conda config --show 發現: envs_dirs: /root/autodl-tmp/miniconda3/envs/envs_test/path/root/autodl-tmp/miniconda3/envs/root/.conda/envs 未顯式指定環境路徑&#xf…

低代碼核心原理總結

Web 低代碼平臺核心原理深度解析 1. 架構總覽 Web低代碼平臺的核心架構包含四個關鍵層次: class LowCodePlatform {constructor() {this.visualEditor new VisualEditor(); // 可視化編輯器this.metaDataEngine new MetaDataEngine(); // 元數據引擎this.code…

操作系統研發工作心得體會 - 于復雜性中構建秩序

在操作系統(OS)研發這片要求極致嚴謹與創新的工程深海中航行數載,我的角色從一個純粹的技術專家,逐漸演變為一個需要兼顧技術深度、系統廣度與團隊效能的復合型角色。這段旅程,讓我深刻體會到,構建一個成功…

Excel 表格 - Excel 減少干擾、專注于內容的查看方式

Excel 減少干擾、專注于內容的查看方式 1、隱藏元素 點擊 【視圖】 -> 取消勾選 【網格線】 -> 取消勾選 【編輯欄】 -> 取消勾選 【標題】2、全屏顯示 點擊 【功能區顯示選項】(工具欄右下角小箭頭) -> 點擊 【全屏模式】

C# Web API 前端傳入參數時間為Utc

Web API 前端傳入參數時間為Utc(時間相差8個小時)1.在Program.csbuilder.Services.AddControllers().AddJsonOptions(options > {// 序列化時將時間轉換為本地時間(北京時間)options.JsonSerializerOptions.Converters.Add(new…

AI Agent開發入門:Semantic Kernel構建智能郵件助手

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力,80G大顯存,按量計費,靈活彈性,頂級配置,學生更享專屬優惠。 引言:AI Agent——下一代人機交互范式 在人工智能技術…