在項目中如何巧妙使用緩存

緩存

對于經常訪問的數據,每次都從數據庫(硬盤)中獲取是比較慢,可以利用性能更高的存儲來提高系統響應速度,俗稱緩存 。合理使用緩存可以顯著降低數據庫的壓力、提高系統性能。
那么,什么樣的數據適合緩存呢?一般情況下就4個字“讀多寫少 ”,要頻繁查詢的、不怎么修改的。
具體來說:

  1. 高頻訪問的數據:如系統首頁、熱門推薦內容等。
  2. 計算成本較高的數據:如復雜查詢結果、大量數據的統計結果。
  3. 允許短時間延遲的數據:如不需要實時更新的排行榜、圖片列表等。
    在我們的項目中,主頁是用戶高頻訪問的內容,調用的獲取圖片列表的接口也是高頻訪問的。而且即使數據更新存在一定延遲,也不會對用戶體驗造成明顯影響,因此非常適合緩存。

Redis分布式緩存

分布式緩存是指將緩存數據分布存儲在多臺服務器上,以便在高并發場景下提供更高的吞吐量和更好的容錯性。
Redis是實現分布式緩存的主流方案,也是后端開發必學的技能。主要是由于它具有下面幾個優勢:

  • 高性能:基于內存操作,訪問速度極快。單節點 Redis的讀寫QPS可達10w次每秒!
  • 豐富的數據結構:支持字符串、列表、集合、哈希、位圖等,適用于各種數據結構存儲。
  • 分布式支持:可以通過RedisCluster構建高可用、高性能的分布式緩存,還提供哨兵集群機制提升可用性、提供分片集群機制提高可擴展性。

緩存設計

需要緩存首頁的圖片列表數據,也就是對 listPictureVOByPage接口進行緩存。首先按照緩存3要素"key、value、過期時間”進行設計。

  1. 緩存 key 設計
    由于接口支持傳入不同的查詢條件,對應的數據不同,因此需要將查詢條件作為緩存key的一部分。
    可以將查詢條件對象轉換為JSON字符串,但這個JSON會比較長,可以利用哈希算法(md5)來壓縮key。
    此外,由于使用分布式緩存,可能由多個項目和業務共享,因此需要在key的開頭拼接前綴進行隔離。設計出的key如下:
    yunpicture:listPictureVOByPage:${查詢條件key}
  2. 緩存 value 設計
    緩存從數據庫中查到的Page分頁對象,存儲為什么格式呢?這里有2種選擇:
  • 為了可讀性,可以轉換為JSON結構的字符串
  • 為了壓縮空間,可以存為二進制等其他結構
    但是對應的 Redis 數據結構都是 string。
  1. 緩存過期時間設置
    必須設置緩存過期時間! 根據實際業務場景和緩存空間的大小、數據的一致性的要求設置,合適即可,此處由于查詢條件較多、而且考慮到圖片會持續更新,設置為5~60分鐘即可。

Caffeine 本地緩存

當應用需要頻繁訪問某些數據時,可以將這些數據緩存到應用的內存中(比如JVM中);下次訪問時,直接從內存讀取,而不需要經過網絡或其他存儲系統。
相比于分布式緩存,本地緩存的速度更快,但是無法在多個服務器間共享數據、而且不方便擴容。
所以本地緩存的應用場景一般是:

  • 數據訪問量有限的小型數據集
  • 不需要服務器間共享數據的單機應用
  • 高頻、低延遲的訪問場景(如用戶臨時會話信息、短期熱點數據)。
    對于Java項目,Caffeine是主流的本地緩存技術,擁有極高的性能和豐富的功能。比如可以精確控制緩存數量和大小、支持緩存過期、支持多種緩存淘汰策略、支持異步操作、線程安全等。
    由于本地緩存不需要引入額外的中間件,成本更低。因此如果只是要提升數據訪問性能,優先考慮本地緩存而不是分布式緩存。

緩存設計

本地緩存的設計和分布式緩存基本一致,不再贊述。但有2個區別:

  1. 本地緩存需要自己創建初始化緩存結構(可以簡單理解為要自己new一個HashMap)。
  2. 由于本地緩存本身就是服務器隔離的,而且占用服務器的內存,key可以更精簡一些,不用再添加項目前綴。

多級緩存

多級緩存是指結合本地緩存和分布式緩存的優點,在同一業務場景下構建兩級緩存系統,這樣可以兼顧本地緩存的高性能、以及分布式緩存的數據一致性和可靠性。
多級緩存的工作流程:

  1. 第一級(Caffeine本地緩存):優先從本地緩存中讀取數據。如果命中,則直接返回。
  2. 第二級(Redis分布式緩存):如果本地緩存未命中,則查詢Redis分布式緩存。如果Redis命中,則返回數據并更新本地緩存。
  3. 數據庫查詢:如果Redis也未命中,則查詢數據庫,并將結果寫入Redis和本地緩存。

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

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

相關文章

SLAM中的非線性優化-2D圖優化之零空間(十五)

這節在進行講解SLAM中一個重要概念,零空間,講它有啥用呢?因為SLAM中零空間的存在,才需要FEJ或固定約束存在,本節內容不屬于2D圖優化獨有,先看看什么是零空間概念;零空間是一個核心概念&#xff…

如何解決本地DNS解析失敗問題?以連接AWS ElastiCache Redis為例

在云服務開發中,DNS解析問題常常成為困擾開發者的隱形障礙。本文將通過AWS ElastiCache Redis連接失敗的實際案例,詳細介紹如何診斷和解決DNS解析問題,幫助你快速恢復服務連接。 引言 在使用 telnet 或 redis-cli 連接 AWS ElastiCache Redis 時,有時會遇到類似以下錯誤:…

探索釘釘生態中的宜搭:創建與分享應用的新視界

在當今快速發展的數字化時代,企業對于高效協作和信息管理的需求日益增長。作為阿里巴巴集團旗下的智能工作平臺,釘釘不僅為企業提供了強大的溝通工具,其開放的生態系統也為用戶帶來了無限可能。其中,宜搭(YiDa&#xf…

深入理解事務和MVCC

文章目錄 事務定義并發事務代碼實現 MVCC定義核心機制 事務 定義 什么是事務? 事務是指一組操作要么全部成功,要么全部失敗的執行單位。 在數據庫中,一個事務通常包含一組SQL語句,系統保證這些語句作為一個整體執行。 為什么引…

用 Python 繪制精美雷達圖:多維度材料屬性對比可視化全指南

🌟 為什么選擇雷達圖?從材料科學到多維數據對比的可視化利器 在科研和數據分析領域,當我們需要同時展示多個維度的數據對比時,傳統的柱狀圖或折線圖往往顯得力不從心。這時候,雷達圖(Radar Chart&#xff…

Excel學習03

超級表與圖表 Excel中具有超級表的功能。所謂超級表(官方名稱為“表格”,快捷鍵CtrlT)是Excel中一個強大的數據管理工具,它將普通的數據區域轉換為具有只能功能的交互式表格。 這就是表格變為超級表的樣子。超級表默認具備凍結窗…

Netflix 網飛的架構演進過程、Java在網飛中的應用|圖解

寫在前面 上一篇文章中,我們講解了網飛當前的架構,但網飛的架構并不是一開始就是這樣的,而是不斷演進發展才是當前的樣子。 這篇文章我們就來講講網飛架構的演進過程。 第一階段:Zuul Gateway REST API 使用 Zuul 作為API網關…

使用ros2服務實現人臉檢測2-人臉檢測功能實現(適合0基礎小白)

文章目錄 一、用到的庫二、使用步驟1.引入庫2.獲取圖片真實路徑3.檢測人臉4.繪制人臉5.顯示結果6.更改setup.py7.完整代碼 三、結果展示 一、用到的庫 face_recognition:實現在圖片中檢測人臉。 cv2:顯示圖片,并且可以在圖像中展示檢測結果。…

中國農村統計年鑒-Excel版(1985-2024年)

《中國農村統計年鑒》系統收錄了全國和各省農村社會經濟統計數據,以及近年全國農村主要統計數據,是一部全面反映我國農村社會經濟情況的資料性年刊。年鑒內容覆蓋農村人口結構、農業產值、主要農產品產量、市場物價、進出口貿易以及收入消費水平等社會經…

golang pprof性能調試工具

簡介 pprof是性能調試工具,可以生成類似火焰圖、堆棧圖,內存分析圖等。 整個分析的過程分為兩步:1. 導出數據,2. 分析數據。

PPIO × 302.AI:三分鐘搭建可共享的聊天機器人

最近,各主流模型廠商頻頻發布新模型,有一如既往強大的DeepSeek-R1-0528,擅長長輸入推理的MiniMax-M1-80k…… 好用的AI大模型這么多,如何才能集成在一個應用自由使用呢?302.AI作為企業級AI應用平臺支持各主流模型調用&…

怎么樣在自己的網站/獨立站中添加視頻?

文章目錄 **前言** 一、視頻在網站/獨立站的好處二、視頻嵌入網站的原理三、如何簡易地把視頻嵌入到獨立站中? 前言 在信息傳播形式日益多元化的當下,靜態文字與圖片早已無法滿足用戶對沉浸式瀏覽體驗的需求。視頻以其動態畫面、聲音及文字相結合的特性…

【圖像處理基石】什么是攝影的數碼味?

“數碼味”是一個攝影術語,通常指照片看起來不自然,有過度處理的痕跡,比如色彩過于鮮艷、對比度偏高、高光過曝、陰影死黑,或者有明顯的銳化痕跡和噪點。這種現象在手機攝影中尤為常見,因為手機相機的自動算法往往會為…

報表控件stimulsoft教程:在報表、儀表板和 PDF 表單自動生成縮略圖

了解縮略圖的工作原理在使用Stimulsoft Demo、Stimulsoft Server和Stimulsoft Cloud時非常有用。例如,您可以在此處查看縮略圖的實際效果 - 當側邊欄折疊時,將顯示縮略圖而不是資源列表。在本文中,我們將探討 Stimulsoft 產品中報表、儀表板和…

變分自編碼器(VAE)

1. 從自編碼器(AE)到變分自編碼器(VAE) 自編碼器(AutoEncoder, AE) 基本結構: 自編碼器是一種無監督學習模型,通常由兩個部分組成: 編碼器(Encoder)&…

ChatboxAI 搭載 GPT 與 DeepSeek,引領科研與知識庫管理變革

文章摘要:本文深入探討 ChatboxAI 在科研領域的應用優勢。ChatboxAI 集成多模型,支持全平臺,能高效管理科研知識,助力文獻檢索、實驗設計與論文撰寫,提升科研效率與質量,同時保障數據安全。其知識庫功能可整…

【無刷電機FOC進階基礎準備】【04 clark變換、park變換、等幅值變換】

目錄 clark變換park變換等幅值變換 其實我不太記得住什么是clark變換、park變換,我每次要用到這個名詞的時候都會上網查一下,因為這就是兩個名詞而已,但是我能記住的是他們背后的含義。 經過【從零開始實現stm32無刷電機FOC】系列后應該對cla…

Sentinel的流控策略

在 Sentinel 中,流控策略(Flow Control Strategy)用于定義如何處理請求的流量,并決定在流量達到某個閾值時采取的行動。流控策略是實現系統穩定性和高可用性的核心機制,尤其在高并發環境中,確保服務不會因過…

Ubuntu Extension Manager 插件卸載

Ubuntu 上使用Extension Manager 安裝插件,但目前無法在Extension Manager 中卸載。 卸載方式可以通過 gnome-extensions 命令進行卸載: Usage:gnome-extensions COMMAND [ARGS…]Commands:help Print helpversion Print versionenable Enabl…

深度學習中Embedding原理講解

我們用最直白的方式來理解深度學習中 Embedding(嵌入) 的概念。 核心思想一句話: Embedding 就是把一些復雜、離散的東西(比如文字、類別、ID)轉換成計算機更容易理解和計算的“數字密碼”,這些“數字密碼…