記一次緩存填坑省市區級聯獲取的操作

先說緩存是什么?

緩存主要是解決高并發,大數據場景下,熱點數據快速訪問。緩存的原則首先保證數據的準確和最終數據一致,其次是距離用戶越近越好,同步越及時越好。

再說我們遇到的場景:

接手項目后,發現省市區前端調用,后臺整合了全國數據進行返回。文件超過了1MB。喊著前端同事進行整改,更改成選擇哪個獲取下級的級聯方式,前端的大爺們不配合。哎!催不動啊!你知道不合理但是優化不了。只能在不合理的基礎上進行優化。

指導思想:借鑒nacos的配置中心,通過版本號識別是否產生更改,進行數據同步。

這個方案改動比較小,僅額外增加了一個版本號字段,無特殊邏輯,前端接受了。

數據都存儲在哪兒了

第1層:客戶端緩存

app緩存了全量的數據。
檢測是否需要更新時,根據版本號查詢后臺數據,響應了具體數據就進行本地數據更新,否則保持原狀。

緩存的構建和更改: 根據版本號調用后臺服務,返回了非空的數據,進行緩存數據的更新。

第2層:nginx緩存

我們通過nginx配置,控制nginx自動緩存了這個版本號對應的數據,有效期是24小時。nginx緩存我們并沒有進行手動清理,因為改動不頻繁,并且能容忍24小時的時間差。真的想要立刻生效,就手動去進行nginx的緩存刪除。

緩存的構建:數據查詢完成,緩存對應的請求網址和響應結果。

緩存內容:

? ? ? ? 初始化后緩存內容:?老版本號/新版本號=空數據,空版本號=全量數據+新版本號

? ? ? ? 數據更改后緩存內容:空版本號/老版本號=全量數據+新版本號,新版本號=空數據。(緩存未清理則有延時)

第3層:本地服務的緩存

本地服務采用Ehcache,未配置失效時間。

緩存內容:最新版本號/最新數據。

查詢操作:比對傳入版本號是否和最新版本號相同,相同則返回空對象,否則返回全量數據

緩存的構建:當前緩存無數據,根據redis查詢的結果,進行本地緩存的重建。

緩存的清理:redis數據構建完畢,通過loadBalance讀取eureka服務名稱對應的所有節點信息,輪詢調用所有服務的數據清理接口。

第4層:分布式緩存redis

本地服務采用redis緩存,未配置失效時間。

緩存內容:最新版本號/最新數據。

業務操作:比對傳入版本號是否和最新版本號相同,相同則返回空對象,否則返回全量數據。

緩存的構建:當查詢redis無數據時,雙重檢查鎖防擊穿,查詢數據庫,進行redis緩存的構建。

緩存的清理:產生數據庫更新操作時,進行redis緩存的清理動作。

第5層:真實的數據庫

更新操作:進行數據庫的數據更新,調用redis的重新構建方法,集群輪詢調用本地緩存清理方法。

查詢操作:查詢數據庫,組裝前端期望的對象。

這樣搭建的效果:

當客戶端進行請求時, 調用nginx, nginx檢測自己的緩存, 根據緩存返回數據。

nginx緩存失效(1天失效一次),服務器本地緩存查詢并返回。

服務器本地緩存失效(服務重啟),通過redis查詢并返回。

redis數據失效(redis被清理),根據數據庫進行緩存的構建,并返回。

數據沒有產生變更,用戶持有的是最新的版本號,大部分場景下返回的都是空對象,減少了海量的io和網絡資源的消耗。

同時這個模型像是一個倒置的漏斗, 無論nginx接受了多少請求,相同的請求地址,一天最多放行了1個,撐住了絕大部分的請求流量,nginx每天放行的一個,也被本地緩存命中,減少了redis的查詢。

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

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

相關文章

無法加載文件 E:\Program Files\nodejs\npm.ps1,因為在此系統上禁止運行腳本

遇到“無法加載文件 E:\Program Files\nodejs\npm.ps1,因為在此系統上禁止運行腳本”這類錯誤,通常是因為你的 PowerShell 執行策略設置為不允許運行腳本。在 Windows 系統中,默認情況下,出于安全考慮,PowerShell 可能會阻止運行未…

OpenWebUI新突破,MCPO框架解鎖MCP工具新玩法

大家好,Open WebUI 迎來重要更新,現已正式支持 MCP 工具服務器,但 MCP 工具服務器需由兼容 OpenAPI 的代理作為前端。mcpo 是一款實用代理,經測試,它能讓開發者使用 MCP 服務器命令和標準 OpenAPI 服務器工具&#xff…

松下SMT貼片機選型與高效應用指南

內容概要 在電子制造領域,SMT貼片機作為核心生產設備,其選型與應用直接關系到企業產能與產品質量。本文聚焦松下SMT貼片機系列,通過系統性梳理設備選型邏輯與技術特性,為制造企業提供多維度的決策參考。重點涵蓋主流機型性能參數…

計算機網絡(1)——概述

1.計算機網絡基本概念 1.1 什么是計算機網絡 計算機網絡的產生背景 在計算機網絡出現之前,計算機之間都是相互獨立的,每臺計算機只能訪問自身存儲的數據,無法與其他計算機進行數據交換和資源共享。這種獨立的計算機系統存在諸多局限性&#…

React學習(二)-變量

也是很無聊,竟然寫這玩意,畢竟不是學術研究,普通工作沒那么多概念性東西,會用就行╮(╯▽╰)╭ 在React中,變量是用于存儲和管理數據的基本單位。根據其用途和生命周期,React中的變量可以分為以下幾類&…

完整卸載 Fabric Manager 的方法

目錄 ? 完整卸載 Fabric Manager 的方法 1?? 停止并禁用服務 2?? 卸載 Fabric Manager 軟件包 3?? 自動清理無用依賴(可選) 4?? 檢查是否卸載成功 ? 補充(僅清除服務,不刪包) ? 完整卸載 Fabric Mana…

ABP vNext 多租戶開發實戰指南

🚀 ABP vNext 多租戶開發實戰指南 🛠? 環境:.NET 8.0 ABP vNext 8.1.5 (C# 11, EF Core 8) 📚 目錄 🚀 ABP vNext 多租戶開發實戰指南🏠 一、什么是多租戶?📦 二、ABP 多租戶的核…

【WIN】筆記本電腦忘記密碼解決辦法/筆記本電腦重裝系統筆記/bitlocker忘記密碼的解決辦法

通過安全模式下的CMD命令找回 具體的步驟就是: 首先通過筆記本的對應的一個進入安全模式的一個方式 進入安全模式之后,一直點著這個診斷,然后高級選項進去就可以看到了。 但是這種方法應該是屬于安全漏洞,所以只適合老版本。如果是…

人工智能100問?第25問:什么是循環神經網絡(RNN)?

目錄 一、通俗解釋 二、專業解析 三、權威參考 循環神經網絡(RNN)是一種通過“記憶”序列中歷史信息來處理時序數據的神經網絡,可捕捉前后數據的關聯性,擅長處理語言、語音等序列化任務。 一、通俗解釋 想象你在和朋友聊天,每說一句話都會根據之前的對話內容調整語氣…

實驗八 基于Python的數字圖像問題處理

一、實驗目的 ? 培養利用圖像處理技術解決實際問題的能力。 ? 培養利用圖像處理技術綜合設計實現的能力。 ? 掌握在Python環境下解決實際問題的能力。 ? 熟練掌握使用cv2庫對圖像進行處理 ? 熟練掌握使用區域生長法提取圖片中感興趣的區域 二、實驗內容 本次實驗內容為…

STM32F10xx 參考手冊

6. 什么是寄存器 本章參考資料:《STM32F10xx 參考手冊》、《STM32F10xx數據手冊》、 學習本章時,配合《STM32F10xx 參考手冊》“存儲器和總線架構”及“通用I/O(GPIO)”章節一起閱讀,效果會更佳,特別是涉及到寄存器說明的部分。…

TCVectorDB 向量數據庫簡介

簡介 盡管目前大多數開源向量數據庫來自海外,配置簡單且性能優異,但由于網絡原因,如果向量數據庫部署在海外,而產品面向國內市場,網絡延遲將是必須考慮的問題。因此,選擇國內服務提供商的云向量數據庫往往是…

力扣-比特位計數(統計一個數二進制下1的個數)

下面是題面 1.用c的內置函數__builtin_popcount() 語法:__builtin_popcount(int x),函數會返回一個二進制下x所含的1的個數 2.直接數位枚舉 這是最慢也是暴力做法,寫法也很簡單 用一個while循環…

青少年編程與數學 02-019 Rust 編程基礎 16課題、包、單元包及模塊

青少年編程與數學 02-019 Rust 編程基礎 16課題、包、單元包及模塊 一、包1. **什么是 Crate?**2. **Crate 的類型**3. **Crate 的結構**4. **使用 Crate**5. **創建和管理 Crate**6. **發布 Crate**7. **Crate 的優勢**8. **示例**創建一個 library crate 二、單元…

強化學習入門:馬爾科夫獎勵過程二

文章目錄 前言1、動作2、策略總結 前言 最近想開一個關于強化學習專欄,因為DeepSeek-R1很火,但本人對于LLM連門都沒入。因此,只是記錄一些類似的讀書筆記,內容不深,大多數只是一些概念的東西,數學公式也不會…

【大數據知識】今天聊聊Clickhouse部署方案

ClickHouse部署 一、ClickHouse部署一、單節點部署1. 安裝準備2. 目錄規劃3. 核心配置4. 啟動服務 二、集群部署方案1. 集群拓撲設計2. 分布式配置3. 表引擎選擇 三、安全加固1. 認證配置2. SSL加密 四、性能優化1. 核心參數調優2. 資源隔離 五、監控與維護1. Prometheus 集成2…

打卡Day28

題目1:定義圓(Circle)類 要求: 1.包含屬性:半徑 radius。 2.包含方法: ●calculate_area():計算圓的面積(公式:πr)。 ●calculate_circumference()&#xff…

BERT 進階:Albert 模型詳解與實戰

目錄 BERT 進階:Albert 模型詳解與實戰 一、ALBERT 的優化策略 (一)Embedding 參數因式分解 (二)跨層參數共享 (三)巨劍連貫性損失 二、ALBERT 模型架構 (一)Tran…

使用 163 郵箱實現 Spring Boot 郵箱驗證碼登錄

使用 163 郵箱實現 Spring Boot 郵箱驗證碼登錄 本文將詳細介紹如何使用網易 163 郵箱作為 SMTP 郵件服務器,實現 Spring Boot 項目中的郵件驗證碼發送功能,并解決常見配置報錯問題。 一、為什么需要郵箱授權碼? 出于安全考慮,大…

深入解析Spring Boot與Spring Security的集成實踐

深入解析Spring Boot與Spring Security的集成實踐 引言 在現代Web應用開發中,安全性是一個不可忽視的重要方面。Spring Security作為Spring生態中的安全框架,提供了強大的認證和授權功能。本文將結合Spring Boot,詳細介紹如何集成Spring Se…