面試官常問的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,其他不變。