1. 程式人生 > >必必須掌握的Redis知識點

必必須掌握的Redis知識點

需要明確的概念:

master(主伺服器),slave(從伺服器),sentinel(哨兵)

redis持久化的兩種方式:RDB和AOF

RDB持久化是在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork(叉)一個子程序,先將資料集寫入臨時檔案,寫入成功後,再替換之前的檔案,用二進位制壓縮儲存。

優點:(1)檔案備份只有一個檔案,容易查詢恢復;(2)災難恢復效率高;

缺點:(1)如果在定時持久化前出現宕機,資料將丟失;(2)RDB是通過fork子程序來協助完成持久化,如果資料集較大會導致伺服器短時間內停止服務

AOF持久化以日誌的形式記錄伺服器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文字的方式記錄,可以開啟檔案看到詳細的操作記錄。

優點:資料安全性更高,可以配置同步持久化

缺點:災難恢復效率低

主從複製原理

主從多個redis集合在一起,以一個master多個slave為模式對外提供服務,配置master可讀可寫,配置slave提供讀,這樣就即能保證redis叢集中的資料同步,又可以實現redis的讀寫分離,如果寫比較多的情況一般就以非同步的形式提供服務

redis主從複製可以根據是否是全量分為全量同步和增量同步

全量同步,一般發生在slave初始化階段,這時slave需要將master上的所有資料都複製一份

增量同步,slave初始化後開始正常工作時主伺服器發生的寫操作同步到從伺服器的過程,增量複製的過程主要是主伺服器每執行一個寫命令就會向從伺服器傳送相同的寫命令,從伺服器接收並執行收到的寫命令

redis主從同步策略

主從剛剛連線的時候,進行全量同步;全同步結束後,進行增量同步。如果有需要,slave 在任何時候都可以發起全量同步。redis 策略是,無論如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步

注意:如果多個slave斷線了,需要重啟的時候,因為只要slave啟動,就會發送sync請求和主機全量同步,當多個同時出現的時候,可能會導致Master IO劇增宕機

哨兵機制

哨兵是一個分散式系統,可以在一個架構中執行多個哨兵,該系統執行以下三個任務

監控:哨兵會不斷地檢查master和slave是否執行正常,只需配置主節點的監控即可,通過向主節點發送info,獲取從節點的資訊,並當有新的從節點加入時可以馬上感知

提醒:當被監控的redis出現問題時,哨兵通過API向管理員或其他程式傳送通知

自動故障遷移:當一個master不能正常工作時,它會將失效master中的一個slave升級為新的master(這個master可以進行讀寫操作),並讓失效master的其他slave改為複製新的master,當客戶端試圖連線到失效master時,叢集也會向客戶端返回新的master的地址,使得叢集可以使用master代替失效的master,如果之前的主伺服器恢復,會自動跟隨新選舉出來的master成為slave

哨兵的工作方式:

每隔一秒哨兵會向它所知的master,slave以及其他哨兵傳送一次ping命令做一次心跳檢測,如果ping的時間超過指定值,哨兵節點則認為該節點錯誤或下線,主觀下線

如果一個master被標記為主觀下線,則監視這個master的所有哨兵都要以每秒一次的頻率確認master的確進入了主觀下線狀態,當有足夠數量的哨兵(大於配置檔案的值)確認master進入主觀下線狀態,則master會標記為客觀下線

快取穿透及優化

快取穿透是指查詢一個不存在的key資料,由於快取沒命中需要從資料庫查詢,查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到資料庫去查詢,流量大時DB會掛掉,這也是經常提的快取命中率問題

解決:

1.如果查詢資料庫也為空,直接設定一個預設值存放到快取,這樣第二次到緩衝中獲取就有值了,而不會繼續訪問資料庫,這種辦法最簡單粗暴

2.在控制層對要查詢的key進行校驗,不符合則丟棄,然後再放行給後面的正常快取處理邏輯

快取擊穿及優化

與快取雪崩的區別在於這裡針對某一key快取過期,雪崩很多key

快取雪崩及優化

快取雪崩是由於大量的key設定了相同的過期時間,原有快取失效,新快取未到期間。所有請求都去查詢資料庫,而對資料庫CPU和記憶體造成巨大壓力,嚴重的會造成資料庫宕機造成整個系統崩潰

為什麼設定過期時間:比如我們在傳送手機驗證碼的時候,將手機號作為redis key,驗證碼作為redis value儲存在redis中,並設定過期時間為60秒,如果60秒的時間到了,懂了沒?

解決:

1.一般併發量不是特別多的時候,使用最多的解決方案是加鎖排隊

2.高併發下給每一個快取資料增加相應的快取標記,用來記錄快取的是否失效,如果快取標記失效,則更新資料快取

3.簡單有效的方法:快取失效時間分散開,比如我們可以在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個快取的過期時間的重複率就會降低

相關推薦

必須掌握Redis知識點

需要明確的概念: master(主伺服器),slave(從伺服器),sentinel(哨兵) redis持久化的兩種方式:RDB和AOF RDB持久化是在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork(叉)一個子程序,先將資料集寫入臨時檔案,寫入

Android程序員必須掌握知識點-多進程和多線程

線程安全 適用於 傳遞 觸摸 播放音樂 RF tro ins 如果 當某個應用組件啟動且該應用沒有運行其他任何組件時,Android 系統會使用單個執行線程為應用啟動新的 Linux 進程。默認情況下,同一應用的所有組件在相同的進程和線程(稱為“主”線程)中運行。 如果某個

嵌入式軟體開發 必須掌握知識點(三)(有錯還望指點^_^)

1、 arm處理器中的浮點運算 http://www.doc88.com/p-50080526332.html http://www.cnblogs.com/bossin/archive/2007/04/08/704567.html 浮點運算是指浮點數參與的運算,這種運算通常

嵌入式軟體開發 必須掌握知識點(二)(有錯還望指點^_^)

1、 嵌入式系統的主要組成部分 1)硬體裝置;2)嵌入式作業系統;3)應用軟體; 2、一條語句實現“判斷一個數X為2的 n 次冪” if(x&(x-1)==0) { } 3、linux系統的裝置分類 1)字元裝置;2)塊裝置

嵌入式軟體開發 必須掌握知識點(一)(有錯還望指點^_^)

1、CPU對資料兩種儲存模式:小端儲存和大端儲存 (Little-Endian and  Big-Endian) 如整數0x12345678在記憶體中應該如下存放: 地低: base   | base+1   | base+2&n

.NET工程師必須掌握知識點

Microsoft SQL Server 資料庫 一、建立和維護資料庫 1、資料庫   SQL Server 資料庫的組成部分?(參見聯機叢書)   如何保證資料庫的完整性、安全性、併發性?   資料庫設計建立步驟?(參見聯機叢書 - 建立資料庫計劃)   資料庫設計考慮的

高階.NET工程師必須掌握知識點

Microsoft SQL Server 資料庫 一、建立和維護資料庫 1、資料庫   SQL Server 資料庫的組成部分?(參見聯機叢書)   如何保證資料庫的完整性、安全性、併發性?   資料庫設計建立步驟?(參見聯機叢書 - 建立資料庫計劃)   資料

關於資料庫索引,必須掌握知識點

> MySQL的索引是資料庫非常重要的知識點,這些知識點你都掌握了嗎?如果有幫到你可以點贊收藏呦。 **推薦閱讀**:[這些必會的計算機網路知識點你都掌握了嗎](https://ww.cnblogs.com/zydybaby/p/14154148.html) [TOC] #### 什麼是索引? 

一些必須掌握的Java基礎知識點

搜索 home 構建 kit 列表 classpath cto lean pri 我們先來了解一下Java基礎知識,以便於我們對Java的體系有個全面掌握和認知。 一、基礎知識 1.Java的三種技術架構 JAVAEE:Java Platform Enterprise Ed

學習JavaScript你必須掌握的8大知識點

com http 基礎 targe 51cto ora col 必須 nbsp 學習JavaScript你必須掌握的8大知識點! 一、JavaScript思維導圖之<變量>的學習 二、 JavaScript思維導圖之<函數基礎&

Linux使用者看:29個必須掌握的常用

Linux使用者必看:29個必須掌握的常用命令 雖然Linux發行版支援各種各樣的GUI(graphical user interfaces),但在某些情況下,Linux的命令行介面(bash)仍然是簡單快速的。Bash和Linux She

redis五種資料型別及必須掌握的指令

一、redis五種資料型別 1.string(字串) string是redis最基本的型別,你可以理解成與Memcached一模一樣的型別,一個key對應一個value。 string型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg圖片或者序列化的物件 。 s

【前端GUI】—— 網站美工必須掌握的PS知識點&思維導圖

前言:前端離不開與設計的溝通,有時候還需要自己上手改動甚至設計網頁,所以這裡簡單梳理一下近期學習的“網站美工”相關知識及練習。(工作用不上的時候,自己玩兒著也蠻有意思的,哈哈(*゚∀゚*)~) 一、PS軟體工具   基礎練習:

十年資深架構師告訴Java程式設計師成為架構師必須掌握知識點

分散式架構是 分散式計算技術的應用和工具,目前成熟的技術包括J2EE, CORBA和.NET(DCOM),這些技術牽扯的內容非常廣,並不是一兩句話就能說清楚的。因此想了解分散式知識點的可以關注我的VX公眾號:“Java架構師學習”。或者進群:688583154獲取免費的視訊錄影學習:Java工程化、高效能及

從C過度到C++,你必須掌握知識點

內容原創,未經本人同意請勿轉載。聯絡本人:[email protected] 1,virtual函式 函式之前加上virtual關鍵字就表示該函式為虛擬函式,在派生類中通過重寫該虛擬函式來實現對基類函式的覆蓋。 //基類中定義virtua

一個iOS開發者必須掌握的66個知識點,你掌握了多少?

1.不可變陣列轉變為可變陣列宣告例項變數的陣列  必須記得實現 對於遍歷陣列找到物件後 如果還需要查詢 記得先結束 再查詢(return/break) NSArray * arr = @[@"人在囧途",@"煎餅俠",@"西遊記",]; NSMutableA

OSN博士必須掌握殺技(更新至2017/12/15)

以下內容更新至2017.12.15 1.概率圖模型 1.1 Representation 1.1.1 The Bayesian Network Representation 1.1.2 Undirected Graphical Mode

Java架構師必須掌握的七大知識點

線程 executors 註冊 技術 合作 雙向 linux內核 參數 包括 Java架構師主要需要做哪些工作呢? 1、負責設計和搭建軟件系統架構(平臺、數據庫、接口和應用架構等),解決開發中各種系統架構問題。 2、優化現有系統的性能,解決軟件系統平臺關鍵技術問題攻關、核心

現代人必須掌握的成功學方法

有意 團隊 做出 一個人 article 資源管理 風險 center 自己 揭開面紗 IT小牛從大學開始接觸成功學,一開始非常熱衷,後來非常反感。原因非常easy。成功學就是扯淡,簡直就是大道理通講,再加上一些激情的演說。跟搞傳銷那樣似的。成功學僅僅是聽起來熱血澎

數據庫---->應掌握知識點:概述

如何實現 數據 設計 掌握 伸縮性 原理 dbms 存儲 系統 第一部分 DBMS的功能以及實現該功能的原理 數據庫管理系統相關知識 DBMS如何存儲和管理大數據集(有效性和可伸縮性) DBMS是如何實現多用戶同時存取數據的(並發性) 系統出現故障時,DBMS如何保護數