最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis的4種緩存模式分享

 更新時間:2022年07月04日 08:28:54   作者:??程序新視界????  
這篇文章主要介紹了Redis的4種緩存模式分享,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下

概述

在系統(tǒng)架構(gòu)中,緩存可謂提供系統(tǒng)性能的最簡單方法之一,稍微有點開發(fā)經(jīng)驗的同學必然會與緩存打過交道,最起碼也實踐過。

如果使用得當,緩存可以減少響應時間、減少數(shù)據(jù)庫負載以及節(jié)省成本。但如果緩存使用不當,則可能出現(xiàn)一些莫名其妙的問題。

在不同的場景下,所使用的緩存策略也是有變化的。如果在你的印象和經(jīng)驗中,緩存還只是簡單的查詢、更新操作,那么這篇文章真的值得你學習一下。

在這里,為大家系統(tǒng)地講解4種緩存模式以及它們的使用場景、流程以及優(yōu)缺點。

緩存策略的選擇

本質(zhì)上來講,緩存策略取決于數(shù)據(jù)和數(shù)據(jù)訪問模式。換句話說,數(shù)據(jù)是如何寫和讀的。

例如:

  • 系統(tǒng)是寫多讀少的嗎?(例如,基于時間的日志)
  • 數(shù)據(jù)是否是只寫入一次并被讀取多次?(例如,用戶配置文件)
  • 返回的數(shù)據(jù)總是唯一的嗎?(例如,搜索查詢)

選擇正確的緩存策略才是提高性能的關鍵。

常用的緩存策略有以下五種:

  • Cache-Aside Pattern:旁路緩存模式
  • Read Through Cache Pattern:讀穿透模式
  • Write Through Cache Pattern:寫穿透模式
  • Write Behind Pattern:又叫Write Back,異步緩存寫入模式

上述緩存策略的劃分是基于對數(shù)據(jù)的讀寫流程來區(qū)分的,有的緩存策略下是應用程序僅和緩存交互,有的緩存策略下應用程序同時與緩存和數(shù)據(jù)庫進行交互。因為這個是策略劃分比較重要的一個維度,所以在后續(xù)流程學習時大家需要特別留意一下。

Cache Aside

Cache Aside是最常見的緩存模式,應用程序可直接與緩存和數(shù)據(jù)庫對話。Cache Aside可用來讀操作和寫操作。

讀操作的流程圖:

讀操作的流程:

  • 應用程序接收到數(shù)據(jù)查詢(讀)請求;
  • 應用程序所需查詢的數(shù)據(jù)是否在緩存上:
    • 如果存在(Cache hit),從緩存上查詢出數(shù)據(jù),直接返回;
    • 如果不存在(Cache miss),則從數(shù)據(jù)庫中檢索數(shù)據(jù),并存入緩存中,返回結(jié)果數(shù)據(jù);

這里我們需要留意一個操作的邊界,也就是數(shù)據(jù)庫和緩存的操作均由應用程序直接進行操作。

寫操作的流程圖:

這里的寫操作,包括創(chuàng)建、更新和刪除。在寫操作的時候,Cache Aside模式是先更新數(shù)據(jù)庫(增、刪、改),然后直接刪除緩存。

Cache Aside模式可以說適用于大多數(shù)的場景,通常為了應對不同類型的數(shù)據(jù),還可以有兩種策略來加載緩存:

  • 使用時加載緩存:當需要使用緩存數(shù)據(jù)時,從數(shù)據(jù)庫中查詢出來,第一次查詢之后,后續(xù)請求從緩存中獲得數(shù)據(jù);
  • 預加載緩存:在項目啟動時或啟動后通過程序預加載緩存信息,比如”國家信息、貨幣信息、用戶信息,新聞信息“等不是經(jīng)常變更的數(shù)據(jù)。

Cache Aside適用于讀多寫少的場景,比如用戶信息、新聞報道等,一旦寫入緩存,幾乎不會進行修改。該模式的缺點是可能會出現(xiàn)緩存和數(shù)據(jù)庫雙寫不一致的情況。

Cache Aside也是一個標準的模式,像Facebook便是采用的這種模式。

Read Through

Read-Through和Cache-Aside很相似,不同點在于程序不需要關注從哪里讀取數(shù)據(jù)(緩存還是數(shù)據(jù)庫),它只需要從緩存中讀數(shù)據(jù)。而緩存中的數(shù)據(jù)從哪里來是由緩存決定的。

Cache Aside是由調(diào)用方負責把數(shù)據(jù)加載入緩存,而Read Through則用緩存服務自己來加載,從而對應用方是透明的。Read-Through的優(yōu)勢是讓程序代碼變得更簡潔。

這里就涉及到我們上面所說的應用程序操作邊界問題了,直接來看流程圖:

在上述流程圖中,重點關注一下虛線框內(nèi)的操作,這部分操作不再由應用程序來處理,而是由緩存自己來處理。也就是說,當應用從緩存中查詢某條數(shù)據(jù)時,如果數(shù)據(jù)不存在則由緩存來完成數(shù)據(jù)的加載,最后再由緩存返回數(shù)據(jù)結(jié)果給應用程序。

Write Through

在Cache Aside中,應用程序需要維護兩個數(shù)據(jù)存儲:一個緩存,一個數(shù)據(jù)庫。這對于應用程序來說,有一些繁瑣。

Write-Through模式下,所有的寫操作都經(jīng)過緩存,每次向緩存中寫數(shù)據(jù)時,緩存會把數(shù)據(jù)持久化到對應的數(shù)據(jù)庫中去,且這兩個操作在一個事務中完成。因此,只有兩次都寫成功了才是最終寫成功了。壞處是有寫延遲,好處是保證了數(shù)據(jù)的一致性。

可以理解為,應用程序認為后端就是一個單一的存儲,而存儲自身維護自己的Cache。

因為程序只和緩存交互,編碼會變得更加簡單和整潔,當需要在多處復用相同邏輯時這點就變得格外明顯。

當使用Write-Through時,一般都配合使用Read-Through來使用。Write-Through的潛在使用場景是銀行系統(tǒng)。

Write-Through適用情況有:

  • 需要頻繁讀取相同數(shù)據(jù)
  • 不能忍受數(shù)據(jù)丟失(相對Write-Behind而言)和數(shù)據(jù)不一致

在使用Write-Through時要特別注意的是緩存的有效性管理,否則會導致大量的緩存占用內(nèi)存資源。甚至有效的緩存數(shù)據(jù)被無效的緩存數(shù)據(jù)給清除掉。

Write-Behind

Write-Behind和Write-Through在”程序只和緩存交互且只能通過緩存寫數(shù)據(jù)“這方面很相似。不同點在于Write-Through會把數(shù)據(jù)立即寫入數(shù)據(jù)庫中,而Write-Behind會在一段時間之后(或是被其他方式觸發(fā))把數(shù)據(jù)一起寫入數(shù)據(jù)庫,這個異步寫操作是Write-Behind的最大特點。

數(shù)據(jù)庫寫操作可以用不同的方式完成,其中一個方式就是收集所有的寫操作并在某一時間點(比如數(shù)據(jù)庫負載低的時候)批量寫入。另一種方式就是合并幾個寫操作成為一個小批次操作,接著緩存收集寫操作一起批量寫入。

異步寫操作極大的降低了請求延遲并減輕了數(shù)據(jù)庫的負擔。同時也放大了數(shù)據(jù)不一致的。比如有人此時直接從數(shù)據(jù)庫中查詢數(shù)據(jù),但是更新的數(shù)據(jù)還未被寫入數(shù)據(jù)庫,此時查詢到的數(shù)據(jù)就不是最新的數(shù)據(jù)。

小結(jié)

不同的緩存模式有不同的考量點和特征,根據(jù)應用程序需求場景的不同,需要靈活的選擇適配的緩存模式。在實踐的過程中往往也是多種模式相結(jié)合來使用。

到此這篇關于Redis的4種緩存模式分享的文章就介紹到這了,更多相關Redis緩存模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Redis Template使用詳解示例教程

    Redis Template使用詳解示例教程

    RedisTemplate的底層通過RedisConnectionFactory對多種Redis驅(qū)動進行集成,上層通過RedisOperations提供豐富的API,并結(jié)合Spring基于泛型的bean注入,為開發(fā)提供了極大的便利,這篇文章主要介紹了Redis Template使用詳解示例教程,需要的朋友可以參考下
    2023-11-11
  • Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用

    Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用

    本文主要介紹了Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Redis搶單預熱的實現(xiàn)示例

    Redis搶單預熱的實現(xiàn)示例

    本文主要介紹了Redis搶單預熱的實現(xiàn)示例,以應對搶單活動帶來的高并發(fā)訪問壓力,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • redis內(nèi)存空間效率問題的深入探究

    redis內(nèi)存空間效率問題的深入探究

    redis緩存固然高效,可是它會占用我們系統(tǒng)中寶貴的內(nèi)存資源,那該如何解決呢?這篇文章主要給大家介紹了關于redis內(nèi)存空間效率問題的相關資料,需要的朋友可以參考下
    2021-05-05
  • Redis協(xié)議具體用法詳解

    Redis協(xié)議具體用法詳解

    在本篇文章中小編給大家整理了關于Redis協(xié)議具體用法以及相關內(nèi)容知識點,需要的朋友們學習下。
    2019-06-06
  • 無法連接redis服務器問題的解決辦法(非常詳細!)

    無法連接redis服務器問題的解決辦法(非常詳細!)

    這篇文章主要介紹了如何解決Spring?Boot項目連接Redis失敗的問題,通過修改Redis配置文件、添加防火墻白名單或關閉防火墻,并使用RESP工具進行測試,需要的朋友可以參考下
    2025-02-02
  • Redis設置鍵的生存時間或過期時間的方法詳解

    Redis設置鍵的生存時間或過期時間的方法詳解

    這篇文章主要介紹了Redis如何設置鍵的生存時間或過期時間,通過EXPIRE命令或者PEXIPIRE命令,客戶端可以以秒或者毫秒精度為數(shù)據(jù)庫中的某個鍵設置生存時間,文中有詳細的代碼供供大家參考,需要的朋友可以參考下
    2024-03-03
  • kubernetes環(huán)境部署單節(jié)點redis數(shù)據(jù)庫的方法

    kubernetes環(huán)境部署單節(jié)點redis數(shù)據(jù)庫的方法

    這篇文章主要介紹了kubernetes環(huán)境部署單節(jié)點redis數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Redis與緩存解讀

    Redis與緩存解讀

    文章介紹了Redis作為緩存層的優(yōu)勢和缺點,并分析了六種緩存更新策略,包括超時剔除、先刪緩存再更新數(shù)據(jù)庫、旁路緩存、先更新數(shù)據(jù)庫再刪緩存、先更新數(shù)據(jù)庫再更新緩存、讀寫穿透和異步緩存寫入模式,還討論了緩存常見問題
    2025-01-01
  • 查看Redis內(nèi)存信息的命令

    查看Redis內(nèi)存信息的命令

    Redis 是一個開源、高性能的Key-Value數(shù)據(jù)庫,被廣泛應用在服務器各種場景中。本文介紹幾個查看Redis內(nèi)存信息的命令,包括常用的info memory、info keyspace、bigkeys等。
    2020-09-09

最新評論

红安县| 邵阳市| 石柱| 天柱县| 卢湾区| 苏尼特右旗| 宝山区| 和龙市| 鹰潭市| 望都县| 兰州市| 双桥区| 周口市| 义乌市| 昔阳县| 柳江县| 鄂托克前旗| 南部县| 庆元县| 芒康县| 新乡市| 石景山区| 伽师县| 蕉岭县| 右玉县| 八宿县| 朝阳县| 固原市| 海阳市| 鲜城| 云浮市| 琼中| 乌兰浩特市| 渭南市| 万载县| 麻阳| 泰来县| 广宁县| 庆城县| 牡丹江市| 资兴市|