Redis相關面試題

2022-10-11 01:21:10 字數 1467 閱讀 9179

原因:redis是記憶體儲存,斷電丟失資料,所以需要資料持久化。

非同步執行緒、fork、copy on write、系統io、fsync

rdb:指定時間間隔內觸發頻率,對資料進行快照儲存。

儲存rdb檔案是父程序fork子程序來完成,最大化redis的效能

丟失資料多

aof:每次對伺服器寫操作會追加日誌記錄,伺服器重啟時會執行日誌檔案中命令來恢復資料。

最多丟失1s資料

aof體積過大時,自動對aof重寫,新aof檔案包含恢復當前資料集所需的最小集合命令。

新版本優化重寫檔案時,資料以rdb的形式追加aof頭部,重寫後的aof已然追加的是日誌,但是恢復時先rdb再增量日誌,效能更優秀。(先巨集觀再補微觀)

若資料只在伺服器執行的時候做個中間快取,可以不適用任何持久化方式

也可以同時開啟2中持久化方式,預設優先aof,資料更加完整。

時間過期是使用unix時間戳儲存,絕對時間點,相對時間點。時鐘輪演算法。

過期方式:被動和主動。

客戶端訪問時,key發現並主動過期(被動);定時隨機測試keys過期時間,過期的刪除(主動)。

常見集群:主從複製集群,分片集群

redis:主從複製集群(手動切換),哨兵ha主從複製集群(自動)

事務是乙個單獨的隔離操作,事務中所有命令都會序列化、按順序執行。事務執行中不會被其他命令打斷。

事務是原子操作。全部執行(有些會失敗)或全部不執行

multi 開啟事務

命令列入隊

exec 執行|discard 回滾

事務執行失敗時不回滾,繼續執行下個命令。

失敗的命令是由程式設計錯誤造成,而這些錯誤開發過程中就應被發現,而不應該出現在生產環境中。

回滾並不能解決程式設計錯誤帶來的問題,如自增。因為不需要回滾支援,所以redis內部簡單且快速。

鑑於沒有任何機制能避免程式設計師自己造成的錯誤,並且這類錯誤通常不會在生產環境出現,所以redis選擇了更簡單、更快速的無回滾方式處理事務。

讀寫分離,master主機寫,sl**e讀。使用非同步複製,非阻塞的,非一致性的

快取穿透:查詢不存在的資料(redis和資料庫都沒),不存在不寫入快取,不存在的資料每次請求都要查詢儲存層,失去快取意義,大流量下db可能掛掉。

解決方案:布隆過濾器,將可能存在的hash到乙個足夠大的bitmap中,一定不存在的資料會被bitmap攔截掉,避免了對底層資料庫的查詢壓力;快取空結果,設定較短的過期時間。

快取擊穿:過期的熱點資料key某些時間點被大量併發的訪問,衝擊資料庫。

解決方案:  1.設定熱點資料永不過期(因為滿了會預設隨機清理設定時間的快取資料)

2.加互斥鎖(分布式鎖):每個key同時只有乙個執行緒去查詢後端服務

快取雪崩:key大面積失效,衝擊資料庫

解決方案:失效時間在原有基礎上增加隨機值,使失效時間均勻分布

總結:都是快取不存在下,高併發的請求。可以使用限流的互斥鎖,保障資料庫穩定執行。

Redis相關面試題

reids 單執行緒 io多路復用機制 redis與memcached的區別 一 memcached值是簡單字串,redis支援hash set list等複雜資料型別 二 redis可持久化資料,容災能力強。memcached只存於記憶體中。三 redis是單執行緒操作,核心是io多路復用機制,效...

Redis 相關面試題(下)

1 redis的快取失效策略和主鍵失效機制 作為快取系統都要定期清理無效資料,就需要乙個主鍵失效和淘汰策略.在redis當中,有生存期的key被稱為volatile。在建立快取時,要為給定的key設定生存期,當key過期的時候 生存期為0 它可能會被刪除。1.過期時間跟著key走,與值無關 在red...

Redis的相關面試題

redis有淘汰機制 1.noeviction 預設c策略 記憶體不足時,直接報錯。不用 2.allkeys lru 當記憶體不足時,在全部key中移除最近最少使用的key lru演算法 3.volatile lru 當記憶體不足時,在設定了過期時間的key中移除最近最少使用的key lru演算法 ...