redis的典型應用 --緩存

Redis最主要的用途,分為三個方面:

1.存儲數據(內存數據庫)

2.緩存(最常用)

3.消息隊列

緩存 (cache) 是計算機中的?個經典的概念。核?思路就是把?些常?的數據放到觸?可及(訪問速度更快)的地?,方便隨時讀取。

使用redis作為緩存

通常是使用redis作為數據庫的緩存(mysql),mysql這樣的關系型數據庫的速度比較慢,就可以使用redis作為mysql的緩存。

如果訪問數據庫的并發量?較?, 對于數據庫的壓?是很?的, 很容易就會使數據庫服務器宕機。

為什么并發量?了就會宕機?

服務器每次處理一個請求,一定要消耗一些硬件資源(cpu,內存,硬盤,網絡),任意一種資源的消耗超出了機器能提供的上限,機器就很容易故障了。

如何提高mysql能承擔的并發量?

1.開源:引入更多的機器,構成數據庫集群。

2.節流:引入緩存。把一些頻繁讀取的熱點數據,保存到緩存上。后續在查詢數據的時候,如果緩存中已經存在了,就不再訪問mysql了。

Redis 訪問速度? MySQL 快很多。或者說處理同?個訪問請求, Redis 消耗的系統資源?
MySQL 少很多. 因此 Redis 能?持的并發量更?.

緩存更新策略

如何知道redis中應該存儲哪些數據呢?這就涉及到redis緩存的更新策略。

定期生成

會把訪問的數據,以日志的形式記錄下來。

每隔?定的周期(?如?天/?周/?個?),?對于訪問的數據頻次進?統計。挑選出訪問頻次最?的前 N%的數據。

搜索引擎為例,可以寫一套離線的流程,通過定時任務來觸發:

a) 完成統計熱詞的過程。

b)根據熱詞,找到搜索結果數據(廣告數據)

c)把得到緩存數據同步到緩存服務器上

d)控制這些緩存服務器自動重啟

優點:實現起來比較簡單,過程更可控,方便排查問題。

缺點:實時性不夠,如果出現一些突發性事件,有一些本來不是熱詞的內容,成了熱詞。新的熱詞就可能給后面的數據庫帶來較大的壓力。(?如春節期間, "春晚" 這樣的詞就會成為?常?頻的詞. ?平時則很少會有?搜索 "春晚".)

實時生成

實時生成的流程:

? 如果在 Redis 查到了, 就直接返回.
? 如果 Redis 中不存在, 就從數據庫查,把查到的結果同時也寫? Redis。

可這樣不停的寫redis,就會使redis的內存占用越來越多。會逐漸達到內存上限。

此時如果繼續往里插入數據,就會觸發問題。為了解決上述情況,redis就引入了“內存淘汰策略”。

主要有以下幾種:

Redis 也提供了內置的淘汰策略, 也可以供我們直接使?:

整體來說 Redis 提供的策略和我們上述介紹的通?策略是基本?致的。只不過 Redis 這?會針對 "過期key" 和 "全部 key" 做分別處理。

緩存使用注意事項

緩存預熱

緩存中的數據,定期生成不涉及“預熱”。

在實時生成時,redis服務器首次接入之后,服務器里時沒有數據的。客戶端先查詢redis,如果沒查到,就再查一次mysql,查到了之后,會把數據也寫到redis中。

此時,所有的請求都會打給mysql,隨著時間的推移,redis上的數據越積累越多,mysql承擔的壓力就逐漸減小了。

緩存預熱,就是用來解決上述問題的。

定期生成和實時生成,結合一下。即先通過離線的方式,通過一些統計的途徑,先把熱點數據找到一批,導入到redis中。此時導入的熱點數據,就能幫mysql承擔很大的壓力了。隨著時間的推移,逐漸就使用新的熱點數據淘汰掉舊的數據。

緩存穿透

查詢到的某個key,在redis中沒有,mysql中也沒有。這個key肯定也不會被更新到redis中。如果像這樣的數據存在很多,并且還反復查詢,一樣也會給mysql帶來很大的壓力。這種情況稱為 緩存穿透。

為何會產生這樣的現象?

如何解決這種現象?

1)如果發現這個key,在redis和mysql上都不存在,仍然寫入redis中,value設置成一個非法值(比如"")

2)引入布隆過濾器,每次查詢redis/mysql之前都判定一下key是否在布隆過濾器上存在。(把所有的key都插入到布隆過濾器中)

布隆過濾器:本質上是結合了hash+bitmap,以比較小的空間開銷,比較快的時間速度,實現針對key是否存在的判定。

緩存雪崩

由于在短時間內,redis上大規模的key失效,導致緩存命中率陡然下降,并且mysql的壓力迅速上升,甚至直接宕機。

為何產生?

1)redis直接掛了。redis宕機/redis集群模式下大量節點宕機。

2)redis沒問題,但是可能之前短時間內設置了很多key給redis,并且設置的過期時間是相同的。(給redis里設置key作為緩存的時候,有時為了考慮緩存的時效性,就會設置過期時間)

如何解決?

1)加強監控報警,加強redis集群可用性的保證。

2)不給key設置過期時間/設置過期時間的時候添加隨機的因子(避免同一時刻過期)

緩存擊穿

相當于緩存雪崩的特殊情況。針對熱點 key , 突然過期了, 導致?量的請求直接訪問到數據庫上, 甚?引起數據庫宕機。熱點key訪問的頻率高,比緩存雪崩影響更大。

如何解決?

1)基于統計的?式發現熱點 key, 并設置永不過期。往往需要服務器結構做出較大的調整。

2)進行必要的服務降級,在特定的情況下適當的關閉一些不重要的功能,只保留核心功能。例如訪問數據庫的時候使用分布式鎖,限制同時請求數據庫的并發數。

以上,關于redis的緩存,希望對你有所幫助。

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

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

相關文章

本地基于Ollama部署的DeepSeek詳細接口文檔說明

前文,我們已經在本地基于Ollama部署好了DeepSeek大模型,并且已經告知過如何查看本地的API。為了避免網絡安全問題,我們希望已經在本地調優的模型,能夠嵌入到在本地的其他應用程序中,發揮本地DeepSeek的作用。因此需要知…

基于ArcGIS和ETOPO-2022 DEM數據分層繪制全球海陸分布

第〇部分 前言 一幅帶有地理空間參考、且包含海陸分布的DEM圖像在研究區的繪制中非常常見,本文將實現以下圖像的繪制 關鍵步驟: (1)NOAA-NCEI官方下載最新的ETOPO-2022 DEM數據 (2)在ArcGIS(…

自動化測試框架pytest+requests+allure

Pytest requests Allure 這個框架基于python的的 Pytest 進行測試執行,并結合 Allure插件 生成測試報告的測試框架。采用 關鍵字驅動 方式,使測試用例更加清晰、模塊化,同時支持 YAML 文件來管理測試用例,方便維護和擴展。 測試…

Retrofit中scalars轉換html為字符串

簡介 在Retrofit中,如果你想直接獲取HTML或其他文本格式的響應內容而不是將其映射到一個模型類,ScalarsConverterFactory 就派上用場了。ScalarsConverterFactory 是一個轉換器工廠,它能夠將響應體轉換為Java基本類型如String、Integer或Byte…

Powershell WSL Windows系統復制數據到ubuntu子系統系統

從本地D盤下拷貝數據到ubuntu子系統下 Powershell 管理員打開執行 /mnt/d 此處是本地Windows系統的路徑表示/opt ubutu 子系統目錄 wsl -d Ubuntu-22.04 -u root -- bash -c cp -rf /mnt/d/nginx.conf /opt/從ubuntu子系統中拷貝數據到本地D盤下 Powershell 管理員打開執行…

【多線程】線程安全集合類,ConcurrentHashMap實現原理

文章目錄 線程安全集合類解決方案多線程環境使用順序表多線程環境使用隊列多線程環境使用哈希表ConcurrentHashMap1. 縮小鎖的粒度2. 充分使用 CAS3. 針對擴容操作 線程安全集合類 ArrayList、Queue、HsahMap… 都是線程不安全的 Vector、Stack、Hashtable 都是線程安全的&am…

spring-tx筆記

編程式事務與聲明式事務的理解 補充:什么是事務? 事務是一個重要概念,尤其在數據庫管理系統中。事務是指一組操作。,這些操作要么全部成功執行,要么全部不執行,確保數據的一致性和完整性 編程式事務 編…

Android第四次面試(Java基礎篇)

一、Java 中的 DCL 單例模式 單例模式是設計模式中最常用的模式之一,其核心目標是確保一個類在程序中僅有一個實例,并提供全局訪問點。在 Java 中,實現單例模式需要兼顧線程安全和性能優化。DCL(Double-Checked Locking&#xff0…

Java-SpringBootWeb入門、Spring官方腳手架連接不上解決方法

一. Spring 官網:Spring | Home Spring發展到今天已經形成了一種開發生態圈,Spring提供了若干個子項目,每個項目用于完成特定的功能(Spring全家桶) Spring Boot可以幫助我們非常快速的構建應用程序、簡化開發、提高效率 。 二. Spring Boot入…

1.7 無窮小的比較

1.定義 2.性質 3.無窮小的比較 3.1等價無窮小的性質 3.2 常見等價無窮小

StarRocks 升級注意事項

前段時間升級了生產環境的 StarRocks,從 3.3.3 升級到了 3.3.9,期間還是踩了不少坑所以在這里記錄下。 因為我們的集群使用的是存算分離的版本,也是使用官方提供的 operator 部署在 kubernetes 里的,所以沒法按照官方的流程進入虛…

深入探究 JVM 堆的垃圾回收機制(一)— 判活

垃圾回收分為兩步:1)判定對象是否存活。2)將“消亡”的對象進行內存回收。 1 判定對象存活 可達性分析算法:通過一系列“GC Roots”對象作為起始節點集,從這些節點開始,根據引用關系向下搜索,…

國產開發板—米爾全志T113-i如何實現ARM+RISC-V+DSP協同計算?

近年來,隨著半導體產業的快速發展和技術的不斷迭代,物聯網設備種類繁多(如智能家居、工業傳感器),對算力、功耗、實時性要求差異大,單一架構無法滿足所有需求。因此米爾推出MYD-YT113i開發板(基…

Tomcat虛擬主機配置詳解:Centos環境下多域名部署(詳細教程!)

🏡作者主頁:點擊! Tomcat服務器📝專欄:點擊! 🐧Linux高級管理防護和群集專欄:點擊! ??創作時間:2025年3月18日14點14分 最近在折騰 Tomcat 的時候&…

鴻蒙開發工程師簡歷項目撰寫全攻略

一、項目結構的黃金法則 建議采用「41」結構: 項目背景(業務價值)技術架構(鴻蒙特性)核心實現(技術難點)個人貢獻(量化成果)附加價值(延伸影響) …

dfs刷題排列問題 + 子集問題 + 組和問題總結

文章目錄 一、排列問題全排列II題解代碼 優美的排列題解代碼 二、子集問題字母大小寫全排列題解代碼 找出所有子集的異或總和再求和題解代碼 三、組合問題電話號碼的字母組合題解代碼 括號生成題解代碼 組合題解代碼 目標和題解代碼 組合總和題解代碼 總結 一、排列問題 全排列…

【Linux】VMware17 安裝 Ubuntu24.04 虛擬機

目錄 安裝教程 一、下載 Ubuntu 桌面版iso映像 二、安裝 VMware 三、安裝 Ubuntu 桌面版 VMware 創建虛擬機 掛載 Ubuntu ISO 安裝 Ubuntu 系統 安裝教程 一、下載 Ubuntu 桌面版iso映像 鏈接來自 清華大學開源軟件鏡像站 ISO文件地址:ubuntu-24.04.2-des…

CVPR2025 | 對抗樣本智能安全方向論文匯總 | 持續更新中~

匯總結果來源:CVPR 2025 Accepted Papers 若文中出現的 論文鏈接 和 GitHub鏈接 點不開,則說明還未公布,在公布后筆者會及時添加. 若筆者未及時添加,歡迎讀者告知. 文章根據題目關鍵詞搜索,可能會有遺漏. 若筆者出現…

PostgreSQL_數據回退,數據庫導出、導入

目錄 前置: 1 數據回退 1.1 代碼 1.2 pgAdmin4 中查看 1)t_daily 2) t_stock_daily 2 數據庫導出、導入 前置: 本博文是一個系列。在本人“數據庫專欄”-》“PostgreSQL_”開頭的博文。 1 數據回退 上一節“PostgreSQL_數據下載并…

golang單機鎖實現

1、鎖的概念引入 首先,為什么需要鎖? 在并發編程中,多個線程或進程可能同時訪問和修改同一個共享資源(例如變量、數據結構、文件)等,若不引入合適的同步機制,會引發以下問題: 數據競…