面試官常問的Redis經典題目
- 2019 年 10 月 6 日
- 筆記

正文
- Redis支援的數據類型有哪些?
- Redis通過Key-Value的單值不同類型來區分, 以下是支援的類型:
- Strings
- Lists
- Sets 求交集、並集
- Sorted Set
- hashes
- 為什麼redis需要把所有數據放到記憶體中?
Redis為了達到最快的讀寫速度將數據都讀到記憶體中,並通過非同步的方式將數據寫入磁碟。所以redis具有快速和數據持久化的特徵。如果不將數據放在記憶體中,磁碟I/O速度為嚴重影響redis的性能。在記憶體越來越便宜的今天,redis將會越來越受歡迎。
如果設置了最大使用的記憶體,則數據已有記錄數達到記憶體限值後不能繼續插入新值。
- Redis是單進程單執行緒的
redis利用隊列技術將並發訪問變為串列訪問,消除了傳統資料庫串列控制的開銷。
- 分散式
redis支援主從的模式。原則:Master會將數據同步到slave,而slave不會將數據同步到master。Slave啟動時會連接master來同步數據。
這是一個典型的分散式讀寫分離模型。我們可以利用master來插入數據,slave提供檢索服務。這樣可以有效減少單個機器的並發訪問數量
- 讀寫分離模型
通過增加Slave DB的數量,讀的性能可以線性增長。為了避免Master DB的單點故障,集群一般都會採用兩台Master DB做雙機熱備,所以整個集群的讀和寫的可用性都非常高。
讀寫分離架構的缺陷在於,不管是Master還是Slave,每個節點都必須保存完整的數據,如果在數據量很大的情況下,集群的擴展能力還是受限於單個節點的存儲能力,而且對於Write-intensive類型的應用,讀寫分離架構並不適合。
- redis常見性能問題和解決方案
(1) Master最好不要做任何持久化工作,如RDB記憶體快照和AOF日誌文件
(2) 如果數據比較重要,某個Slave開啟AOF備份數據,策略設置為每秒同步一次。
(3) 為了主從複製的速度和連接的穩定性,Master和Slave最好在同一個區域網內。
(4) 盡量避免在壓力很大的主庫上增加從庫。
(5) 主從複製不要用圖狀結構,用單向鏈表結構更為穩定,即:Master <- Slave1 <- Slave2 <- Slave3…
這樣的結構方便解決單點故障問題,實現Slave對Master的替換。如果Master掛了,可以立刻啟用Slave1做Master,其他不變。
