redis相關技術總結

2022-09-10 19:51:17 字數 3747 閱讀 8651

1.一致性雜湊分割槽

一致性雜湊的目的就是為了在節點數目發生改變時盡可能少的遷移資料,將所有的儲存節點排列在收尾相接的hash環上,每個key在計算hash 後會順時針找到臨接的儲存節點存放。而當有節點加入或退 時,僅影響該節點在hash環上順時針相鄰的後續節點。

優點加入和刪除節點只影響雜湊環中順時針方向的相鄰的節點,對其他節點無影響。

缺點 資料的分布和節點的位置有關,因為這些節點不是均勻的分布在雜湊環上的,所以資料在進行儲存時達不到均勻分布的效果。

虛擬槽分割槽

本質上還是第一種的普通雜湊演算法,把全部資料離散到指定數量的雜湊槽中,把這些雜湊槽按照節點數量進行了分割槽。這樣因為雜湊槽的數量的固定的,新增節點也不用把資料遷移到新的雜湊槽,只要在節點之間互相遷移就可以了,即保證了資料分布的均勻性,又保證了在新增節點的時候不必遷移過多的資料。

redis的集群模式使用的就是虛擬槽分割槽,一共有16383個槽位平均分布到節點上

2.redis 擴容

當新增節點時,將各節點分出一些插槽給新節點,將待遷移插槽放入, 遷出插槽列表中, 使用類似於scan的掃瞄,進行遷移,遷移過程中有新資料產生

如果有get命令,集群查本地的插槽,有返回,沒有返回ask命令, 客戶端通過ask再次請求新的節點,新節點有則返回,沒有返回空

如果有set命令,節點強制將新key遷移到目標節點

3.為什麼redis不是先記日誌後響應請求?

redis有兩種功能,一種是做持久化資料庫,一種是做快取,如果先記請求日誌,因為檔案io操作是阻塞的,影響redis的效能

4.redis使用場景:

最主要的是in-memory,高效能,分布式

1.服務端session一致等

2.分布式鎖

3.布隆過濾器(hash快取所有的有效資料),防止cc攻擊

5.redis對比memcache有哪些優勢

1.redis可以持久化

2.redis支援多種資料結構

3.redis服務端支援集群,不需要每個客戶端自己做這個事, memcached 不支援主從

4.redis支援的最大value1g, memcahce支援的是1m

6.redis有哪幾種資料淘汰策略

1.volatile-lru  最近最少使用的有過期時間的鍵刪除

2.volatile-ttl  快過期的先刪除

3.volatile-random 隨機刪除有過期時間的key

4.allkey-lru

5.allkey-random

6.no-enviction(驅逐):禁止驅逐資料  不淘汰資料

7.redis集群方案

1.主從: 可以讀寫分離,提高集群的tps, 一般在從庫上持久化

2.哨兵: 主節點down機,可以自動從從節點中選舉主節點,提供服務

3.集群:多個主節點提供寫服務,不同的主節點分配不同的插槽,儲存key/value

8.redis如何設定密碼及驗證密碼

requirepass yourpass 設定密碼

auth password 驗證密碼

9.說說redis雜湊槽的概念

hash槽16384個,虛擬節點,每個真實節點包含多個虛擬節點,當擴容縮容時,只需要遷移部分槽中的key,(擴容時,只需要遷移少部分資料,叫一致性hash)

10.redis集群的主從複製模型是怎樣的

從節點開啟sl**eof ip port ,設為某個節點的從庫,第一次接入時,主庫執行一次bgs**e,將記憶體中的資料同步到從資料庫,從節點成功rdb檔案,然後解析rdb檔案,恢復資料,這段時間內,產生的資料會放在緩衝區中

當從庫同步完rdb檔案後,會增量同步,緩衝區裡的資料,如果快取區設定太小,那麼主節點再次bgs**e影響主節點的響應

11.edis集群會有寫操作丟失嗎?為什麼

會,同步日誌都是非同步的,當redis主機down的時候,寫入是會丟失的

如果是rdb備份,是定時備份,上次備份到down機的時間內,寫操作都丟失

aof備份有幾個選項

11.redis中的管道有什麼用

將多個命令一起發到redis,減少網路延遲

12.怎麼理解redis事務?

redis事務三階段:

開啟:以multi開始乙個事務

入隊:將多個命令入隊到事務中,接到這些命令並不會立即執行,而是放到等待執行的事務佇列裡面

執行:由exec命令觸發事務

redis事務三大特性:

單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷。

沒有隔離級別的概念:佇列中的命令沒有提交之前都不會實際的被執行,因為事務提交前任何指令都不會被實際執行,也就不存在」事務內的查詢要看到事務裡的更新,在事務外查詢不能看到」這個讓人萬分頭痛的問題

不保證原子性:redis同乙個事務中如果有一條命令執行失敗,其後的命令仍然會被執行,沒有回滾

13.redis事務相關的命令有哪幾個

multi  exec  discard取消  watch 監控 樂觀鎖,一致性

14.redis如何做記憶體優化

1.物件共享:數字

2.壓縮結構:編碼優化

3.記憶體**

分割槽是分割資料到多個redis例項的處理過程,因此每個例項只儲存key的乙個子集。

分割槽的優勢

通過利用多台計算機記憶體的和值,允許我們構造更大的資料庫。

通過多核和多台計算機,允許我們擴充套件計算能力;通過多台計算機和網路介面卡,允許我們擴充套件網路頻寬。

分割槽的不足

redis的一些特性在分割槽方面表現的不是很好:

涉及多個key的操作通常是不被支援的。舉例來說,當兩個set對映到不同的redis例項上時,你就不能對這兩個set執行交集操作。

涉及多個key的redis事務不能使用。

當使用分割槽時,資料處理較為複雜,比如你需要處理多個rdb/aof檔案,並且從多個例項和主機備份持久化檔案。

增加或刪除容量也比較複雜。redis集群大多數支援在執行時增加、刪除節點的透明資料平衡的能力,但是類似於客戶端分割槽、**等其他系統則不支援這項特性。然而,一種叫做presharding的技術對此是有幫助的。

redis常見效能問題和解決方案:

master最好不要做任何持久化工作,如rdb記憶體快照和aof日誌檔案

如果資料比較重要,某個sl**e開啟aof備份資料,策略設定為每秒同步一次

為了主從複製的速度和連線的穩定性,master和sl**e最好在同乙個區域網內

盡量避免在壓力很大的主庫上增加從庫

cow技術原理(copy on write,寫時複製)

在複製乙個物件的時候並不是真正的把原先的物件複製到記憶體的另外乙個位置上,而是在新物件的記憶體對映表中設定乙個指標,指向源物件的位置,並把那塊記憶體的copy-on-write位設定為1.

這樣,在對新的物件執行讀操作的時候,記憶體資料不發生任何變動,直接執行讀操作;而在對新的物件執行寫操作時,將真正的物件複製到新的記憶體位址中,並修改新物件的記憶體對映表指向這個新的位置,並在新的記憶體位置上執行寫操作。

這個技術需要跟虛擬記憶體和分頁同時使用,好處就是在執行複製操作時因為不是真正的記憶體複製,而只是建立了乙個指標,因而大大提高效率。但這不是一直成立的,如果在複製新物件之後,大部分物件都還需要繼續進行寫操作會產生大量的分頁錯誤,得不償失。所以cow高效的情況只是在複製新物件之後,在一小部分的記憶體分頁上進行寫操作。

redis 持久化

rdb  aof

rdb 預設的持久化方式 有s**e bgs**e(cow  不阻塞的copy)  定時複製

s**e m n   m秒寫入多少次,觸發

aof 需要開啟開關

Redis相關使用總結(二)

分析 一致性問題是分布式常見問題,還可以再分為最終一致性和強一致性。資料庫和快取雙寫,就必然會存在不一致的問題。答這個問題,先明白乙個前提。就是如果對資料有強一致性要求,不能放快取。我們所做的一切,只能保證最終一致性。另外,我們所做的方案其實從根本上來說,只能說降低不一致發生的概率,無法完全避免。因...

垃圾話檢測相關技術總結

方法一 馬爾科夫鏈參考原始碼 在機器學習演算法中,馬爾可夫鏈 markov chain 是個很重要的概念。馬爾可夫鏈 markov chain 又稱離散時間馬爾可夫鏈 discrete time markov chain 為狀態空間中經過從乙個狀態到另乙個狀態的轉換的隨機過程。該過程要求具備 無記憶...

關於Redis的相關知識個人總結

redis不同於像以往我用的mysql,oracle這樣的關係型資料庫,他是乙個以key value鍵值對形式儲存的資料庫。關於redis,據我目前淺薄的了解,redis可以搭建在雲伺服器上,儲存我們在web應用裡常見的session,眾所周知,session可以儲存使用者登陸的資訊,基於redis...