搜尋
首頁資料庫Redis聊聊Redis中的快取穿透、快取雪崩、快取擊穿和快取一致性

聊聊Redis中的快取穿透、快取雪崩、快取擊穿和快取一致性

Nov 24, 2021 pm 07:42 PM
redis快取一致性緩存穿透緩存雪崩

這篇文章帶大家簡單了解Redis中的快取穿透、快取雪崩、快取擊穿和快取一致性,介紹一下快取穿透和快取雪崩的解決方案,希望對大家有幫助!

聊聊Redis中的快取穿透、快取雪崩、快取擊穿和快取一致性

快取雪崩

快取相同時間大面積失效,後面的請求都會落在資料庫上,造成資料庫短時間內無法承受大量請求而崩潰

例如在電商首頁,所有首頁的key失效時間都是12小時,中午12點刷新,如果零點有個秒殺活動大量用戶湧入,但是緩存當時所有key都失效,此時所有的請求會落到資料庫,資料庫扛不住,就直接就gg了,又或者redis宕機,也會讓大量請求落到mysql,造成掛機。 【相關推薦:Redis影片教學

解決方案

  • 所以像這種情況就應該把每個key的失效時間加個隨機值,避免同一時間大量的key失效,如果是redis叢集部署,可以將熱點資料分佈到各個不同的庫。

  • 事前:盡量保證redis叢集的高可用性,發現機器宕機盡快補上,選擇合適的記憶體淘汰策略

  • 事中:本地ehcache快取hystrix限流加降級,避免mysql崩掉

  • #事後:裡面有redis持久化機制保存的資料盡快恢復快取。

快取穿透

大量請求的key不存在於快取中,例如某個駭客製造快取中不存在的key發起大量請求,導致大量請求落到資料庫。

解決方法

  • 首先應該要做基本的入參校驗,將不合法的參數直接攔截,例如查詢資料庫id不能小於0,校驗郵箱格式等等

  • 如果快取和資料庫都查不到某個key的數據,就將key寫入到redis,value為null,並設定過期時間,避免下次請求落到資料庫上。

  • 透過布隆過濾器,布隆過濾器可以非常方便的判定一個給定的數據是否存在與海量數據中.可以將所有可能存在的請求的值存到布隆過濾器,當請求過來先判斷用戶發來的請求是否存在於布隆過濾器,不存在就直接攔截。

快取擊穿

快取擊穿指的是一個Key非常熱點,在不停的扛著大並發,大並發集中對這一個點進行訪問,當這個key失效瞬間,持續的大並發就穿破緩存,直接請求到資料庫

快取一致性

如果是要求強一致性,那就不能使用緩存,因為保證不了強一致性,只能保證最終一致性。

  • 先刪除緩存,再更新資料庫

如果資料庫更新失敗,那麼資料庫的還是舊數據,redis是空,資料不會不一致,讀到空會去資料庫進行查詢,然後更新到快取。

  • 加入佇列,進行串列化操作

先刪除緩存,再更新資料庫,在高並發場景下也會出現問題,例如刪除了緩存,這時還沒更新資料庫,另一個執行緒進來,發現redis是空,會去讀資料庫,然後更新到redis,而此時刪除了快取的線程接著更新資料庫,就會造成資料庫和redis資料不一致,這時候可以將更新資料的操作放到佇列當中,串列化操作,不會出現,但一般不建議這樣做,因為會降低效率。

更多程式相關知識,請造訪:程式設計入門! !

以上是聊聊Redis中的快取穿透、快取雪崩、快取擊穿和快取一致性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
REDIS:探索其核心功能和好處REDIS:探索其核心功能和好處Apr 30, 2025 am 12:22 AM

Redis的核心功能包括內存存儲和持久化機制。 1)內存存儲提供極快的讀寫速度,適用於高性能應用。 2)持久化通過RDB和AOF兩種方式確保數據不丟失,選擇依據應用需求。

REDIS的服務器端操作:它提供的REDIS的服務器端操作:它提供的Apr 29, 2025 am 12:21 AM

Redis'sserver-sedierations offerfunctions andTriggersForexeCutingCompleXoperationsontheserver.1)函數functionsAllowCompOustomoperationsInlua,JavaScript,javaScript,orredis'sscriptinglanguigh,增強效率和增強性。 2)

REDIS:數據庫還是服務器?揭開角色的神秘面紗REDIS:數據庫還是服務器?揭開角色的神秘面紗Apr 28, 2025 am 12:06 AM

redisisbothadatabaseandaserver.1)asadatabase,ituseSin-memorystorageforfastaccess,ifealforreal-timeapplications andCaching.2)Asaserver,ItsupportsPub/submessagingAndluAsessingandluAsessingandluascriptingftingftingftingftingftingftingftingfinteral-timecommunicationandserverserverserverserverserverserverserver-soperations。

REDIS:NOSQL方法的優勢REDIS:NOSQL方法的優勢Apr 27, 2025 am 12:09 AM

Redis是NoSQL數據庫,提供高性能和靈活性。 1)通過鍵值對存儲數據,適合處理大規模數據和高並發。 2)內存存儲和單線程模型確保快速讀寫和原子性。 3)使用RDB和AOF機制進行數據持久化,支持高可用性和橫向擴展。

REDIS:了解其架構和目的REDIS:了解其架構和目的Apr 26, 2025 am 12:11 AM

Redis是一种内存数据结构存储系统,主要用作数据库、缓存和消息代理。它的核心特点包括单线程模型、I/O多路复用、持久化机制、复制与集群功能。Redis在实际应用中常用于缓存、会话存储和消息队列,通过选择合适的数据结构、使用管道和事务、以及进行监控和调优,可以显著提升其性能。

REDIS與SQL數據庫:關鍵差異REDIS與SQL數據庫:關鍵差異Apr 25, 2025 am 12:02 AM

Redis和SQL數據庫的主要區別在於:Redis是內存數據庫,適用於高性能和靈活性需求;SQL數據庫是關係型數據庫,適用於復雜查詢和數據一致性需求。具體來說,1)Redis提供高速數據訪問和緩存服務,支持多種數據類型,適用於緩存和實時數據處理;2)SQL數據庫通過表格結構管理數據,支持複雜查詢和事務處理,適用於電商和金融系統等需要數據一致性的場景。

REDIS:它如何充當數據存儲和服務REDIS:它如何充當數據存儲和服務Apr 24, 2025 am 12:08 AM

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

REDIS與其他數據庫:比較分析REDIS與其他數據庫:比較分析Apr 23, 2025 am 12:16 AM

Redis與其他數據庫相比,具有以下獨特優勢:1)速度極快,讀寫操作通常在微秒級別;2)支持豐富的數據結構和操作;3)靈活的使用場景,如緩存、計數器和發布訂閱。選擇Redis還是其他數據庫需根據具體需求和場景,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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac 版本

PhpStorm Mac 版本

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。