搜尋
首頁資料庫Redis一起聊聊Redis三種快取問題

這篇文章為大家帶來了關於Redis的相關知識,主要介紹三種快取問題,也就是快取穿透、快取擊穿和快取雪崩的相關內容,希望對大家有幫助。

一起聊聊Redis三種快取問題

推薦學習:Redis學習教學

#一、Redis快取的應用程式

在我們的實際業務場景中,Redis 一般和其他資料庫搭配使用,用來減輕後端資料庫的壓力,例如和關係型資料庫MySQL配合使用。

Redis 會把MySQL經常被查詢的資料緩存起來,例如熱點數據,這樣當使用者來存取的時候,就不需要到MySQL 中去查詢了,而是直接取得Redis 中的快取數據,從而降低了後端資料庫的讀取壓力。

如果說使用者查詢的資料Redis 沒有,此時使用者的查詢要求就會轉到MySQL 資料庫,當MySQL 將資料傳回給客戶端時,同時會將資料快取到Redis 中,讓使用者再次讀取時,就可以直接從Redis 取得資料。流程圖如下所示:

當然,我們在使用Redis作為快取資料庫的過程中也並不是總是能一帆風順,我們會遇到常見的三種快取問題

  • 快取穿透
  • 快取擊穿
  • 快取雪崩

二、快取穿透

2.1 介紹

快取穿透是指當使用者查詢某個資料時,Redis 不存在該數據,也就是快取沒有命中​​,此時查詢請求就會轉向持久層資料庫MySQL,結果發現MySQL 中也不存在該數據,MySQL 只能傳回一個空對象,代表此次查詢失敗。 如果這種類別請求非常多,或是使用者利用這種請求進行惡意攻擊,就會對 MySQL 資料庫造成很大壓力,甚至於崩潰,這種現象就叫做快取穿透。

2.2 解決方案

#快取空物件

# #當MySQL 傳回空物件時, Redis 將該物件快取起來,同時為其設定一個過期時間。 當使用者再次發起相同請求時,就會從快取中拿到一個空物件,使用者的請求被阻斷在了快取層,從而保護了後端資料庫,但是這種做法也存在一些問題,雖然請求進不了MSQL,但是這種策略會佔用Redis 的快取空間。

布隆過濾器

首先將使用者可能會存取的熱點資料的所有key都儲存在布隆過濾器中(也稱為快取預熱),當有一個使用者要求時會先經過布隆過濾器,布隆過濾器會判斷請求的key是否存在,若不存在,那麼該請求將直接被拒絕,否則將繼續執行查詢,先前往快取中查詢,快取沒有的話再前往資料庫中查詢。相較於第一種方法,用布隆過濾器方法更有效率、更實用。 其流程示意圖如下:

#快取預熱:是指系統啟動時,提前將相關的資料載入到Redis 快取系統中。這樣避免了用戶請求的時再去載入資料。

2.3 解決方案的比較

兩個方案都可以解決快取穿透的問題,但其使用的場景卻不同:

快取空物件:適用於空資料的key數量有限、key重複請求機率較高的場景。


布隆過濾器:適用於空資料的key各不相同、key重複請求機率較低的場景。

三、快取擊穿

3.1 介紹

快取擊穿是指使用者查詢的資料快取中不存在,但是後端資料庫卻存在,這種現像出現原因是一般是由快取中key 過期導致的。例如一個熱點資料 key,它無時無刻都在接受大量的並發訪問,如果某一時刻這個 key 突然失效了,就致使大量的並發請求進入後端資料庫,導致其壓力瞬間增大。這種現象稱為快取擊穿。

3.2 解決方案

改變過期時間

##設定熱點資料永遠不會過期。

分散式鎖定

#採用分散式鎖定的方法,重新設計快取的使用方式,過程如下:

  • 上鎖:當我們透過key 去查詢資料時,首先查詢緩存,如果沒有,就透過分散式鎖進行加鎖,第一個取得鎖的程序進入後端資料庫查詢,並將查詢結果緩到Redis 中。
  • 解鎖:當其他行程發現鎖定被某個行程佔用時,就進入等待狀態,直到解鎖後,其餘行程再依序存取被快取的key 。

3.3 解決方案的比較

永遠不會過期 :這種方案由於沒有設定真正的過期時間,實際上已經不存在熱點key 產生的一系列危害,但是會存在資料不一致的情況,同時程式碼複雜度會增大。

互斥鎖:這種方案思路比較簡單,但是有一定的隱患,如果建置快取過程出現問題或時間較長,可能會存在死鎖和執行緒池阻塞的風險,但是這種方法能夠較好的降低後端儲存負載並在一致性上做的比較好。

四、快取雪崩

4.1 介紹

快取雪崩是指快取中大批量的key 同時過期,而此時資料存取量又非常大,導致後端資料庫壓力突然暴增,甚至會掛掉,這種現象稱為快取雪崩。它和快取擊穿不同,快取擊穿是在並發量特別大時,某一個熱點 key 突然過期,而快取雪崩則是大量的 key 同時過期,因此它們根本不是一個量級

4.2 解決方案

#處理過期

##快取雪崩和快取擊穿有相似之處,所以也可以採用

熱點資料永不過期的方法,來減少大批量的key 同時過期。再者就是為 key 設定隨機過期時間,避免 key 集中過期。

redis高可用

#一台Redis可能會因為雪崩而掛掉,那麼可以多增設幾台Redis,

搭建集群,如果一台掛掉之後,其他的還可以繼續工作。

推薦學習:
Redis學習教學

以上是一起聊聊Redis三種快取問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
es和redis区别es和redis区别Jul 06, 2019 pm 01:45 PM

Redis是现在最热门的key-value数据库,Redis的最大特点是key-value存储所带来的简单和高性能;相较于MongoDB和Redis,晚一年发布的ES可能知名度要低一些,ES的特点是搜索,ES是围绕搜索设计的。

一起来聊聊Redis有什么优势和特点一起来聊聊Redis有什么优势和特点May 16, 2022 pm 06:04 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis的一些优势和特点,Redis 是一个开源的使用ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式存储数据库,下面一起来看一下,希望对大家有帮助。

实例详解Redis Cluster集群收缩主从节点实例详解Redis Cluster集群收缩主从节点Apr 21, 2022 pm 06:23 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis Cluster集群收缩主从节点的相关问题,包括了Cluster集群收缩概念、将6390主节点从集群中收缩、验证数据迁移过程是否导致数据异常等,希望对大家有帮助。

Redis实现排行榜及相同积分按时间排序功能的实现Redis实现排行榜及相同积分按时间排序功能的实现Aug 22, 2022 pm 05:51 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,希望对大家有帮助。

详细解析Redis中命令的原子性详细解析Redis中命令的原子性Jun 01, 2022 am 11:58 AM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于原子操作中命令原子性的相关问题,包括了处理并发的方案、编程模型、多IO线程以及单命令的相关内容,下面一起看一下,希望对大家有帮助。

一文搞懂redis的bitmap一文搞懂redis的bitmapApr 27, 2022 pm 07:48 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了bitmap问题,Redis 为我们提供了位图这一数据结构,位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已,希望对大家有帮助。

实例详解Redis实现排行榜及相同积分按时间排序功能的实现实例详解Redis实现排行榜及相同积分按时间排序功能的实现Aug 26, 2022 pm 02:09 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。

一起聊聊Redis实现秒杀的问题一起聊聊Redis实现秒杀的问题May 27, 2022 am 11:40 AM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于实现秒杀的相关内容,包括了秒杀逻辑、存在的链接超时、超卖和库存遗留的问题,下面一起来看一下,希望对大家有帮助。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具