Redis相關機制

2021-09-19 07:00:58 字數 2417 閱讀 6131

什麼是redis

redis是nosql資料庫,記憶體資料庫,是利用記憶體對資料進行快取,從而加快資料的訪問速度,一般情況下,會將熱點資料放入快取,例如使用者資料,許可權資料,排行榜,更新頻率低的報表資料等。

速度快的原因有三個:1.資料在記憶體 2.單執行緒  3.多路復用的i/o

redis的資料結構與支援資料型別

key-value的鍵值對結構,支援string,list,set,zset,hash五種資料型別,每一種資料型別都有對應的命令操作。

redis持久化

上面說到redis的資料是存放在記憶體的,但也可以做持久化,只是持久化不是儲存在資料庫,而是本地硬碟中,在本地會生成dump.rdb檔案,redis的持久化可以開啟可以不開啟,預設開啟,主要有兩種模式rdb模式和aof模式,簡單來說前者是定時持久化,備份資料,後者是實時持久化,可以同時啟用。

rdb預設情況下,redis會採取rdb模式定時備份資料,實際上是以生成快照的方式進行備份,每次都會將全量資料進行備份。

aof實時備份redis資料,每一次redis的資料變動都會觸發備份,與rdb不一樣的是aof是增量備份,在原來備份的基礎上追加資料,實際上aof是將命令儲存下來,在恢復的時候,全部重新執行一次,所以aof會儲存所有完整的操作日誌。

優缺點比較:

1.資料可靠性:rdb是定時備份,無論如何必然會存在一些資料損失;aof是實時的,每次操作都是實時記錄,資料可靠性絕對是更高

2.容災適用:rdb是以定時快照的形式備份,每次生成的是乙個單檔案,方便存放和歸檔,而且恢復的時候直接寫入資料即可,沒有額外的操作;aof在恢復的時候是將儲存的命令重新執行一遍,一條記錄可能會有多個操作,恢復速度比較慢,也因此aof的檔案一般比rdb要大。

一般情況下用於快取的資料只是為了提高資料的讀取速度,並非不可丟失,資料真正儲存在資料庫,所以即便在恢復的時候會造成部分資料丟失也不會對應用造成很大影響,相反,如果redis崩潰後恢復的速度很慢,那麼會降低應用的響應速度,所以一般情況下使用rdb足矣,當然如果存在aof的備份,redis在恢復的時候會首先使用aof的備份進行恢復,因為資料更新更全。

redis的快取重新整理機制

redis的資料是會過期的,否則大量的資料放在記憶體對記憶體的消耗是很大的,對於快取資料的重新整理有三種機制:

1.超時淘汰

超時淘汰有兩種方式,一種是定時過期,redis會定時去掃瞄快取的資料,如果發現資料已經超時了會將資料移除;第二種是惰性過期,當這個資料被訪問的時候,發現已經超時了,會清除掉。

兩種淘汰方式是同時存在的,如果只有定時過期,那麼當資料量很大的時候,掃瞄的時間會變得很長,影響redis處理請求;若只有惰性過期,當大量的資料都沒有被再次訪問的時候,這些資料會一直占用記憶體造成記憶體浪費。二者通常是一起使用,定時過期只會執行一定時間,例如每次只掃瞄1秒就停止了,剩下沒掃瞄到的資料就等待惰性過期,這樣相對合理。

2.主動重新整理

就是手工主動去對資料進行重新整理,例如每次儲存都去重新整理快取

3.根據演算法淘汰

redis哨兵模式

為了保證redis的可用,redis一般是集群部署,會有主節點和從節點,主節點負責寫處理,從節點負責讀處理,一般來說快取資料讀多寫少,當主節點掛掉之後,需要有新的主節點自動切換上去,這時候通過哨兵進行監控。

所謂哨兵從字面理解就是放哨的,用來做監控的,及時發現問題,在集群中除了主節點和從節點,還需要設定哨兵節點,一般是基數個,哨兵節點不會處理讀寫請求,只是專注於監視主節點,當哨兵監視到主節點掛掉了,會從從節點中選取一台作為主節點切換上去,繼續監視。

監視的過程由三個定時任務完成:

1.獲取當前情況:每隔10s,每個哨兵節點向所有主從節點獲取當前最新的集群拓撲結構。

2.匯報情況:每隔2s,每個哨兵節點向同一頻道匯報自己對於主節點的判斷,同時獲取其他哨兵節點的判斷。

3.檢查心跳:每隔1s,每個哨兵節點都ping一下所有的主從節點,看看是否可達

如何判斷主節點掛掉了?

主觀下線:在檢查心跳的時候,如果該節點不可達,那麼對於當前哨兵節點來說,該節點已經下線了,就是我覺得你掛掉了

通過主觀下線與客觀下線的綜合判斷,就可以判斷主節點掛掉了,這時候會重新選舉出新的節點作為主節點。

舉例:比如說現在有幾條道路,這些路都單向行駛的,其中有一條是作為主幹道從東到西來行駛的,大家都從這裡走,其他的都是從西到東,如果主幹道壞掉了大家都沒法走了,需要找另外的路來做主幹道,這時候就需要有幾個人負責定時檢查道路的狀況,首先每個人肯定都要知道當前道路的情況,到底有哪些路是可以走的,但是道路的情況是會變化的,那就需要隔一段時間去獲取一下道路的地圖,有了地圖才好辦事,下面就是定時去主幹道看一下路通不通,但是只靠乙個人的判斷不準確,所有每個人都要去,然後作出自己的判斷,最後大家都定時的將自己的判斷發布到某個地方向所有人進行匯報,如果超過半數的人都覺得這個路走不了,那麼大家就從剩下的道路中找一條作為主幹道來走。

反反爬蟲相關機制

來自於scrapy官方文件描述 這裡是乙個例子 middlewares class scrapy.contrib.middleware.middlewareprocess request 必須返回以下其中之一 乙個 none 乙個 response 物件 乙個 request 物件或 raise i...

MySQL MySQL 相關機制引數解釋說明

一 innodb flush log at trx commit 引數解釋 1 引數解釋 0 log buffer將每秒一次地寫入log file中,並且log file的flush 刷到磁碟 操作同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁碟的操作。1 每次事務提交時mysql都會把lo...

關機相關 shutdown,reboot

慣用的關機指令 shutdown 由於linux的關機是那麼重要的工作,因此除了你是在主機前面以tty7圖形介面來登入系統時,不論用什麼身份都能夠關機之外,若你是使用遠端管理工具 如透過pietty使用ssh服務來從其它電腦登入主機 那關機就僅僅有root有權力而已喔!嗯!那麼就來關機試試看吧!我們...