Redis 使用過程中遇到的具體問題

来源:https://www.cnblogs.com/crazy-lc/archive/2019/11/05/11802530.html
-Advertisement-
Play Games

1.緩存雪崩和緩存穿透問題 1.1緩存雪崩 簡介:緩存同一時間大面積的失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。 解決辦法:  事前:儘量保證整個 redis 集群的高可用性,發現機器宕機儘快補上。選擇合適的記憶體淘汰策略。  事中:本地 ehcache 緩存 ...


1.緩存雪崩和緩存穿透問題

  1.1緩存雪崩

    簡介:緩存同一時間大面積的失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。

  解決辦法:

     事前:儘量保證整個 redis 集群的高可用性,發現機器宕機儘快補上。選擇合適的記憶體淘汰策略。      事中:本地 ehcache 緩存 + hystrix 限流&降級,避免 MySQL 崩掉      事後:利用 redis 持久化機制保存的數據儘快恢復緩存
encache:   Ehcache是純java的開源緩存框架,具有快速、精幹等特點,是Hibernate中預設的CacheProvider。它主要面向通用緩存、Java EE和輕量級容器,具有記憶體和磁碟存儲、緩存載入器、緩存擴展、緩存異常處理程式。    應用場景:

  使用純java的ehcache作為本地緩存
  Reids 作為遠程分散式緩存
  解決redis緩存壓力過大,提高緩存速度,以及緩存性能。

redis和Ehcache緩存的區別
  如果是單個應用或者對緩存訪問要求很高的應用,用ehcache。
  如果是大型系統,存在緩存共用、分散式部署、緩存內容很大的,建議用redis。

實際工作中使用Ehcache
  我們在項目中使用集中式緩存(Redis或者式Memcached等),通常都是檢查緩存中是否存在
期望值的數據,如果存在直接返回,如果不存在就查詢資料庫然後在將資料庫緩存,這個時候如果緩存系統因為某些原因宕機,造成服務無法訪問,那麼大的量請求直接穿透到資料庫,最資料庫壓力非常大。

這時候我們讓ehcache作為二級緩存,當redis伺服器宕機後,可以查詢ehcache緩存。
這樣能夠有效的扛住伺服器請求壓力。
因此, 一般 Redis作為一級緩存, ehcache作為二級緩存。


hystrix :

  簡介:在分散式系統中,單個應用通常會有多個不同類型的外部依賴服務,內部通常依賴於各種RPC服務,外部則依賴於各種HTTP服務。這些依賴服務不可避免的會出現調用失敗,比如超時、異常等情況,如何在外部依賴出問題的情況,仍然保證自身應用的穩定。Hystrix的目標就是能夠在1個或多個依賴出現問題時,系統依然可以穩定的運行,其手段包括隔離、限流和降級等。

服務限流:

  通過線程池+隊列的方式,通過信號量的方式。比如商品評論比較慢,最大能同時處理10個線程,隊列待處理5個,那麼如果同時20個線程到達的話,其中就有5個線程被限流了,其中10個先被執行,另外5個在隊列中

服務熔斷:

  當依賴的服務有大量超時時,在讓新的請求去訪問根本沒有意義,只會無畏的消耗現有資源,比如我們設置了超時時間為1s,如果短時間內有大量請求在1s內都得不到響應,就意味著這個服務出現了異常,此時就沒有必要再讓其他的請求去訪問這個服務了,這個時候就應該使用熔斷器避免資源浪費

服務降級:

  所謂降級,就是當某個服務熔斷之後,服務將不再被調用,此時客戶端可以自己準備一個本地的fallback(回退)回調,返回一個預設值。 例如:(備用介面/緩存/mock數據),這樣做,雖然服務水平下降,但好歹可用,比直接掛掉要強,當然這也要看適合的業務場景

 


 

 

  1.2緩存穿透

     簡介:一般是黑客故意去請求緩存中不存在的數據,導致所有的請求都落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。    解決辦法: 有很多種方法可以有效地解決緩存穿透問題,最常見的則是採用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的 bitmap 中,一個一定不存在的數據被 這個 bitmap 攔截掉,從而避免了對底層存儲系統的查詢壓力。另外也有一個更為簡單粗暴的方法(我們採用的就是這種),如果一個查詢返回的數據為空(不管是數 據不存在,還是系統故障),我們仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

 

 

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、正則的寫法: . (點好) :表示任意一個字元,除了\n,比如查找所有的一個字元\. [] :匹配中括弧中列舉的任意字元,比如[L,Y,0], LLY, Y0, LIU \d :任意一個數字 \D :除了數字都可以 \s :表示空格,tab鍵 \S :除了空白符號 \w :單詞字元,就是a-z, ...
  • 升級 https 記錄 1、去阿裡雲購買證書(免費版),並提交審核資料 購買的證書 2、下載證書 下載證書 3、查看上圖頁面的第三步 JKS證書安裝 4、在證書目錄下執行阿裡雲提供的命令,密碼都填 pfx password.txt 中的內容(三次),會生成 your name.jks 文件。 生成 ...
  • ▶ Log4j2 性能 "https://logging.apache.org/log4j/2.x/performance.html" ▶ Spring Boot 依賴與配置 Maven 依賴 XML 配置 resources/log4j2.xml 混合 sync/async 彩色日誌 分類輸出到不 ...
  • 之前同事問了一道需要點腦洞的演算法題,我覺得蠻有意思的,思路可能會給大家帶來一些啟發,特意在此記錄一下 題目 現有一個元素僅為 0,1 的 n 階矩陣,求連續相鄰(水平或垂直,不能有環)元素值為 1 的序列和的最大值 假設有如下矩陣 則此矩陣連續相鄰元素為 1 的序列和分別為 4, 3,(如圖示),可 ...
  • 2019-11-05-23:03:28 List集合: java.util.List 介面繼承自 Collection 介面,是單列集合的一個重要分支,習慣性地會將實現了List 介面的對象稱為List集合 特點: 1. 它是一個元素存取有序的集合。例如,存元素的順序是11、22、33。那麼集合中, ...
  • 1. 列表 1.1 列表的介紹 列表是python的基礎數據類型之⼀,其他編程語⾔也有類似的數據類型。比如JS中的數組, java中的數組等等。它是以[ ]括起來,每個元素⽤','隔開⽽且可以存放各種數據類型: lst = [1, '哈哈', "吼吼", [1,8,0,"百度"], ("我","叫" ...
  • 1. python介紹 1.1 python是什麼樣的語言 編程語⾔主要從以下⼏個⻆度為進⾏分類,編譯型和解釋型、靜態語⾔和動態語⾔、強類型定義語⾔和弱類型定義語⾔,我們先看編譯型語⾔和解釋型語⾔.稍後再說強類型和弱類型 編譯和解釋的區別是什麼? 編譯器是把源程式的每⼀條語句都編譯成機器語⾔,並保存 ...
  • 開發環境: Windows操作系統 開發工具:MyEclipse/Eclipse + JDK+ Tomcat + MySQL 資料庫 項目簡介: 系統前段頁面採用jsp + JavaScript + css的組合技術開發,其中JavaScript使用了jQuery和bootstrap框架,這兩個前段 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...