Redis、memcache常見的面試題
一、使用Redis有哪些好處?
1、速度快,因為資料存在記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1);
2、支援豐富資料型別,支援string,list,set,sorted set,hash;
3、支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行;
4、豐富的特性:可用於快取,訊息,按key設定過期時間,過期後將會自動刪除。
二、redis相比memcache有哪些優勢?
1、 memcached所有的值均是簡單的字串,redis作為其替代者,支援更為豐富的資料型別
2、redis的速度比memcached快很多
3、redis可以持久化其資料
三、redis常見效能問題和解決方案
1、 Master最好不要做任何持久化工作,如RDB記憶體快照和AOF日誌檔案
2、如果資料比較重要,某個Slave開啟AOF備份資料,策略設定為每秒同步一次
3、 為了主從複製的速度和連線的穩定性,Master和Slave最好在同一個區域網
4、儘量避免在壓力很大的主庫上增加從庫
5、主從複製不要用圖狀結構,用單向連結串列結構更為穩定,即:Master <- Slave1 <- Slave2 <- Slave3...
這樣的結構方便解決單點故障問題,實現Slave對Master的替換。如果Master掛了,可以立刻啟用Slave1做Master,其他不變。
四、MySQL裡有2000w資料,redis中只存20w的資料,如何保證redis中的資料都是熱點資料?
相關知識:redis 記憶體資料集大小上升到一定大小的時候,就會施行資料淘汰策略。redis 提供 6種資料淘汰策略:
voltile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘
volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰
volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰
allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰
allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰
no-enviction(驅逐):禁止驅逐資料
五、Memcache與Redis的區別都有哪些?
1、儲存方式
Memecache把資料全部存在記憶體之中,斷電後會掛掉,資料不能超過記憶體大小。
Redis有部份存在硬碟上,這樣能保證資料的永續性。
2、資料支援型別
Memcache對資料型別支援相對簡單。
Redis有複雜的資料型別。
3、使用底層模型不同
它們之間底層實現方式 以及與客戶端之間通訊的應用協議不一樣。
Redis直接自己構建了VM 機制 ,因為一般的系統呼叫系統函式的話,會浪費一定的時間去移動和請求。
4、value大小
redis最大可以達到1GB,而memcache只有1MB
六、Redis 常見的效能問題都有哪些?如何解決?
1)Master寫記憶體快照,save命令排程rdbSave函式,會阻塞主執行緒的工作,當快照比較大時對效能影響是非常大的,會間斷性暫停服務,所以Master最好不要寫記憶體快照。
2)Master AOF持久化,如果不重寫AOF檔案,這個持久化方式對效能的影響是最小的,但是AOF檔案會不斷增大,AOF檔案過大會影響Master重啟的恢復速度。Master最好不要做任何持久化工作,包括記憶體快照和AOF日誌檔案,特別是不要啟用記憶體快照做持久化,如果資料比較關鍵,某個Slave開啟AOF備份資料,策略為每秒同步一次。
3)Master呼叫BGREWRITEAOF重寫AOF檔案,AOF在重寫的時候會佔大量的CPU和記憶體資源,導致服務load過高,出現短暫服務暫停現象。
4)Redis主從複製的效能問題,為了主從複製的速度和連線的穩定性,Slave和Master最好在同一個區域網內。