周周愛學習之Redis重點總結

redis重點總結

在正常的業務流程中,用戶發送請求,然后到緩存中查詢數據。如果緩存中不存在數據的話,就會去數據庫查詢數據。數據庫中有的話,就會更新緩存然后返回數據,數據庫中也沒有的話就會給用戶返回一個空。

在這里插入圖片描述

1.緩存擊穿

1.1概念

緩存擊穿是指緩存中沒有但數據庫中有的數據(一般是緩存時間到期),這時由于并發用戶特別多,同時讀緩存沒讀到數據,又同時去數據庫去取數據,引起數據庫壓力瞬間增大,造成過大壓力。和緩存雪崩不同的是,緩存擊穿是指并發查同一條數據,緩存雪崩是不同數據都過期了,很多數據都查不到從而查數據庫。

1.2解決方案

  • 設置熱點數據永遠不過期。(常用
  • 加互斥鎖,進行排隊

2.緩存雪崩

2.1概念

緩存雪崩是指緩存同一時間大面積的失效或者緩存服務器宕機,所以,后面的請求都會落到數據庫上,造成數據庫短時間內承受大量請求而崩掉。

2.2解決方案

  • 緩存數據的過期時間設置隨機,防止同一時間大量數據過期現象發生。(常用
  • 一般并發量不是特別多的時候,使用最多的解決方案是加鎖排隊。
  • 給每一個緩存數據增加相應的緩存標記,記錄緩存的是否失效,如果緩存標記失效,則更新數據緩存。

3.緩存穿透

3.1概念

緩存穿透是指緩存和數據庫中都沒有的數據,導致所有的請求都落到數據庫上,造成數據庫短時間內承受大量請求而崩掉。

3.2解決方案

  • 接口層增加校驗,如用戶鑒權校驗,id做基礎校驗,id<=0的直接攔截;
  • 從緩存取不到的數據,在數據庫中也沒有取到,這時也可以將key-value對寫為key-null,緩存有效時間可以設置短點,如30秒(設置太長會導致正常情況也沒法使用)。這樣可以防止攻擊用戶反復用同一個id暴力攻擊
  • 采用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的 bitmap 中,一個一定不存在的數據會被這個 bitmap 攔截掉,從而避免了對底層存儲系統的查詢壓力

4.主從復制原理

實現主從復制 ( Master-slave Replication)的工作原理 :

  1. slave從節點服務啟動并連接到Master之后,它將主動發送一個SYNC命令
  2. Maser服務主節點收到同步命令后將啟動后臺存盤進程,同時收集所有接收到的用于修改數據集的命令,在后臺進程執行完畢后。Mastr將傳送整個數據庫文件到Slave,以完成一次完全同步
  3. 而slave從節點服務在接收到數據庫文件數據之后將其存盤并加載到內存中

此后,Master主節點繼續將所有已經收集到的修改命令,和新的修改命令依次傳送給Slaves,slave將在本次執行這些數據修改命令,從而達到最終的數據同步。

如果Master和Slave之間的鏈接出現斷連現象,Slave可以自動重連Master,但是在連接成功之后,一次完全同步將被自動執行。

5.Redis持久化

Redis是基于內存存儲的nosql數據庫 但是也可以持久化數據到硬盤當中

redis有兩種持久化方式,分別是 rdb 和 aof

5.1rdb

rdb的觸發方式分為兩種:自動觸發、手動觸發

優點:存儲的數據是按照二進制形式進行存儲,比較緊湊,存儲和恢復都比較快

缺點:當進行存盤的時候,在存盤開始到存盤完成的這段時間的數據,并沒有立即的持久化到硬盤當中,如果服務器宕機,就可能發生數據丟失。

5.1.1手動觸發

rdb在手動觸發當中呢,使用的主要是save和bgsave命令。

1.save

save命令執行后,會阻塞當前服務器,知道RDB完成為止,但是當你數據量大的時候,就會出現造成過長時間的阻塞

2.bgsave

bgsave命令執行后,Redis的主進程就會fork一個子進程來完成RDB的過程,完成后自動結束。所有使用bgsave時,造成主進程阻塞的時間只為fork階段的那一下。與save相比,阻塞時間短。

5.1.2自動觸發

場景一:可通過配置redis.conf文件,定義觸發規則使得rdb自動執行

比如 save 900 1 表示 在900s內,至少執行了一次寫操作,就會自動觸發bgsave

場景二:在執行shutdown命令時,如果沒有開啟AOF持久化功能,那么就會自動執行一次bgsave

場景三:主從同步(master和slave建立同步機制

5.2aof

aof的觸發方式也分為 自動觸發和手動觸發

優點:aof存儲中,數據丟失的少,精準度高

缺點:存儲的文件越來越大 需要瘦身 恢復數據也慢

5.2.1手動觸發

執行 bgrewriteaof命令。 該命令會使主進程 redis-server 創建出一個子進程 bgrewriteaof,由該子進程完成 rewrite過程。而在 rewrite 期間,redis-server 仍是可以對外提供讀寫服務的。

5.2.2自動觸發

修改配置文件

首先指定aof文件的名稱。

AOF 持久化的方法提供了多種的同步頻率,即使使用默認的同步頻率每秒同步一次,Redis 最多也就丟失 1 秒的數據而已。

5.3AOF與RDB對比

  1. RDB快照的存儲是全量存儲,每次執行時,會將數據以二進制流的方式全部存儲到硬盤當中。
  2. AOF是增量存儲,他存儲的是數據庫中每次進行數據修改時的命令,將命令以增量的方式存儲在硬盤當中。他的恢復也是將命令從頭到尾執行一遍進行恢復。

在Redis 4.0版本后采用混合模式

在正常的存儲過程中采用RDB快照的方式,而當RDB執行時,采用AOF存儲,這樣既提高了數據存儲和恢復的效率,也減少了丟失的數據(并不是不會丟失)。

6.Redis的key過期策略

過期策略通常有以下三種

  • 定時過期:每個設置過期時間的key都需要創建一個定時器,到過期時間就會立即清除。該策略可以立即清除過期的數據,對內存很友好;但是會占用大量的CPU資源去處理過期的數據,從而影響緩存的響應時間和吞吐量。
  • 惰性過期:只有當訪問一個key時,才會判斷該key是否已過期,過期則清除。該策略可以最大化地節省CPU資源,卻對內存非常不友好。極端情況可能出現大量的過期key沒有再次被訪問,從而不會被清除,占用大量內存。
  • 定期過期:每隔一定的時間,會掃描一定數量的數據庫的expires字典中一定數量的key,并清除其中已過期的key。該策略是前兩者的一個折中方案。通過調整定時掃描的時間間隔和每次掃描的限定耗時,可以在不同情況下使得CPU和內存資源達到最優的平衡效果。

7.Redis的內存淘汰機制

Redis的內存淘汰策略是指在Redis的用于緩存的內存不足時,怎么處理需要新寫入且需要申請額外空間的數據。

全局的鍵空間選擇性移除

  • noeviction:當內存不足以容納新寫入數據時,新寫入操作會報錯。
  • allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key。(這個是最常用的)
  • allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個key。

設置過期時間的鍵空間選擇性移除

  • volatile-lru:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的key。

  • volatile-random當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個key。
    的鍵空間選擇性移除

  • volatile-lru:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的key。

  • volatile-random當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個key。

  • volatile-ttl當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,有更早過期時間的key優先移除。

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

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

相關文章

AIGC創作系統ChatGPT網站源碼,Midjourney繪畫,GPT聯網提問/即將支持TSS語音對話功能

一、AI創作系統 SparkAi創作系統是基于ChatGPT進行開發的Ai智能問答系統和Midjourney繪畫系統&#xff0c;支持OpenAI-GPT全模型國內AI全模型。本期針對源碼系統整體測試下來非常完美&#xff0c;可以說SparkAi是目前國內一款的ChatGPT對接OpenAI軟件系統。那么如何搭建部署AI…

leetcode 面試題 02.02. 返回倒數第k個節點

提建議就是&#xff0c;有些題還是有聯系的&#xff0c;建議就收看完 876.鏈表的中間節點&#xff08;http://t.csdnimg.cn/7axLa&#xff09;&#xff0c;再將這一題聯系起來 面試題 02.02. 返回倒數第k個節點 題目&#xff1a; 實現一種算法&#xff0c;找出單向鏈表中倒數第…

這些接口自動化測試工具如果不知道,就真out了!

一、Postman Postman是一款廣受歡迎的API測試工具&#xff0c;除了手動發送HTTP請求的基本功能&#xff0c;它還提供了自動化測試和腳本測試的功能&#xff0c;非常適合進行HTTP接口的自動化測試。 二、Rest-Assured Rest-Assured是一個Java庫&#xff0c;專為REST服務的測試…

java中守護線程的特點是什么?

Java 中守護線程&#xff08;Daemon Thread&#xff09;的特點如下&#xff1a; 隨主線程結束而結束&#xff1a; 守護線程是在后臺運行的線程&#xff0c;當所有的用戶線程都執行完畢后&#xff0c;即主線程結束&#xff0c;守護線程會隨之被終止。它不會阻止 JVM 退出。 不執…

C++異常剖析

什么是異常&#xff1f; 在程序運行的過程中&#xff0c;我們不可能保證我們的程序百分百不出現異常和錯誤&#xff0c;那么出現異常時該怎么報錯&#xff0c;讓我們知道是哪個地方錯誤了呢? C中就提供了異常處理的機制。 一、異常處理的關鍵字 &#xff08;1&#…

聯想電腦重裝系統Win10步驟和詳細教程

聯想電腦擁有強大的性能&#xff0c;很多用戶辦公都喜歡用聯想電腦。有使用聯想電腦的用戶反映系統出現問題了&#xff0c;想重新安裝一個正常的系統&#xff0c;但是不知道重新系統的具體步驟。接下來小編詳細介紹給聯想電腦重新安裝Win10系統系統的方法步驟。 推薦下載 系統之…

Codeforces Round 913 (Div. 3) (A-G)

后天就是 I C P C ICPC ICPC杭州站了&#xff0c;今天把之前做的 d i v 3 div3 div3題補一下&#xff0c;打完這場杭州站這賽季除了 E C F i n a l EC\,\,Final ECFinal就結束了&#xff0c;以后應該要多打 c f cf cf比賽練習保持手感&#xff0c;爭取下賽季沖一下金牌。 感覺這…

客廳顏值擔當:木飾面電視背景墻設計。福州中宅裝飾,福州裝修

你是否也為客廳的裝修設計而煩惱&#xff1f;現在&#xff0c;我為你帶來一款高顏值的木飾面電視背景墻設計&#xff0c;它將是你客廳的亮點所在。 1?? 確定背景墻的尺寸和位置 首先&#xff0c;你需要確定背景墻的尺寸和位置&#xff0c;這取決于你家電視的大小和放置位置。…

重新認識Word——多級列表和項目符號

重新認識Word——多級列表和項目符號 多級列表沒有運用標題樣式但標題格式統一 正式公本文書項目符號和自動編號項目符號自動編號軟回車重新起頭開始編號解決編號與文本距離過大問題 之前我們重新認識了Word里面的樣式&#xff0c;現在的情況就是&#xff0c;我的一些文字已經運…

Python Authlib庫:構建安全可靠的身份驗證系統

更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com 在現代應用程序中&#xff0c;安全性是至關重要的&#xff0c;特別是在處理用戶身份驗證時。Authlib庫為Python開發者提供了一套強大的工具&#xff0c;用于簡化和增強身份驗證和授權流程。本文將深入探討Authli…

因小失大,一個普通的postman多接口順序執行,讓項目癱瘓了一天

Runner的使用 postman不僅可以單獨運行某個接口&#xff0c;postman的 Runner模塊可以運行多個接口&#xff0c;可以實現真正意義上的自動化接口測試 Runner的主要功能如下 按順序調用接口&#xff0c;執行用例&#xff1b; 批量發送請求&#xff1b; 對接口數據進行參數化…

yarn和npm的區別

2023-12-8 yarn和npm的區別 是常用的包管理工具&#xff0c;用于node.js項目中安裝、管理、和更新依賴項 有以下幾個區別&#xff1a; 性能和速度&#xff1a;在包的安裝和下載方面&#xff0c;yarn比npm更快速&#xff0c;yarn通過并行下載和緩存等優化策略&#xff0c;可以…

DreamPlace 的下載安裝與使用

DreamPlace 是一款芯片放置工具&#xff0c;用于宏單元&#xff08;macro&#xff09;和標準單元&#xff08;Standard Cell&#xff09;的放置以及布線&#xff0c;并計算 HPWL、Overlap 等用于衡量芯片性能的參數。 一、環境 1. 系統環境&#xff1a;Ubuntu 20.04 DreamPla…

我獲取股票和期貨數據的常用函數

記錄一下獲取數據所使用的函數&#xff0c;以防止遺忘和方便查找。 # 獲取掘金的數據 # 需要打開并登陸掘金終端 def get_data_juejin(symbol"bu2112",start"2021-8-1",end"2021-8-30 23:00:00",frequency"1800s",fields"eob,sy…

MySQL視圖介紹與實驗練習

文章目錄 1. MySQL 中的視圖&#xff08;View&#xff09;簡介1.1 視圖的基本概念&#xff1a;1.2 創建視圖&#xff1a;1.3 查看視圖&#xff1a;1.4 更新視圖&#xff1a;1.5 刪除視圖&#xff1a;1.6 視圖的嵌套&#xff1a;1.7 權限管理&#xff1a;1.8 檢查視圖信息&#…

vuepress-----15、md用法進階

vuepress markdown說明文檔 https://www.vuepress.cn/guide/markdown.html # 示例&#xff1a;封裝countUp.js為Vue組件 https://github.com/inorganik/countUp.js https://inorganik.github.io/countUp.js/ # 安裝 yarn add countup.js# 創建vue文件 全局Vue組件存放位置…

web項目服務器后臺運行

阿里官方方法 在Linux系統的ECS實例內,當斷開SSH客戶端后,如何保持進程繼續運行的解決方案_云服務器 ECS-阿里云幫助中心 (aliyun.com)

<Linux>(極簡關鍵、省時省力)《Linux操作系統原理分析之文件管理(1)》(22)

《Linux操作系統原理分析之文件管理&#xff08;1&#xff09;》&#xff08;22&#xff09; 7 文件管理7.1 文件與文件系統7.1.1 文件7.1.3 文件系統及其功能 7.2 文件的組織結構7.2.1 文件的邏輯結構7.2.2 文件的物理結構一、順序結構&#xff08;順序文件或連續文件&#xf…

Java來實現二叉樹算法,將一個二叉樹左右倒置(左右孩子節點互換)

文章目錄 二叉樹算法二叉樹左右變換數據 今天來和大家談談常用的二叉樹算法 二叉樹算法 二叉樹左右變換數據 舉個例子&#xff1a; Java來實現二叉樹算法&#xff0c;將一個二叉樹左右倒置&#xff08;左右孩子節點互換&#xff09;如下圖所示 實現的代碼如下&#xff1a;以…

ECharts的顏色漸變

目錄 一、直接配置參數實現顏色漸變 二、使用ECharts自帶的方法實現顏色漸變 一、兩種漸變的實現方法 1、直接配置參數實現顏色漸變 橫向的漸變&#xff1a; //主要代碼 option {xAxis: {type: category,boundaryGap: false,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yA…