Redis 是一種「Key-Value」的內存型、非關係型數據庫,屬於 NoSQL 的一種。python
Redis 的讀寫速度特別快,特別適合讀寫頻繁的場景。git
Redis 支持主從複製,支持數據持久化。github
爲某一時刻下的 Redis 數據庫裏的內容拍一張照片(快照),並將該照片寫進磁盤中,實現數據持久化。面試
當數據庫崩潰時,會丟失最後一次快照的內容。數據庫
若是數據庫內容過大,那麼生成快照時間會很長。緩存
經過寫命令,將數據追加到(Append Only File)文件末尾,實現數據持久化。服務器
可是使用 AOF,須要解決同步問題。微信
由於文件的寫入不會立馬執行,而是先將寫入的內容放置「緩存區」,等待操做系統決定什麼時候將緩存區的內容寫入磁盤。網絡
Redis 擁有三種同步策略:Always、Everysec、No。多線程
絕大多數狀況下都是使用第二種策略,每隔一秒鐘同步一次,這樣就算數據庫崩潰也只會損失一秒鐘的數據。
而其餘兩種策略,要麼對數據庫的壓力過大,過多下降數據庫的性能,要麼具備丟失數據量過大的風險。
使用slaveof host port
設置主從服務器。
Redis 的主從服務器有點像樹結構,從服務器只能有一個主服務器。
Redis 不支持「主-主複製」。
Redis 主從複製經過利用 RDB 快照持久化的特性,將某一時刻下主服務器的內容生成快照,而後發送給從服務器,並利用緩存區保存在這期間裏進行的「寫命令」,等待快照發送完畢以後,再將寫命令發送給從服務器。
從服務器在接收到快照以後,會將自身的數據所有丟棄,載入快照裏的數據,載入完畢以後,再執行主服務器的寫命令。
Redis | Memcache |
---|---|
支持 String、List、Hash、Set、Zset | 只支持 String |
支持數據持久化 | 不支持 |
支持事務 | 不支持 |
支持主從複製 | 不支持 |
支持分佈式 | 不支持 |
支持將數據交換到磁盤中 | 不支持 |
單進程、單線程 IO 多路複用 | 多線程、非阻塞 IO |
總結爲一點,只用獲得 Redis 裏的 String 類型存儲數據時,使用 Memcache。
除此以外,使用 Redis。
Redis 是內存型的數據庫,能夠設置最大內存,當內存不夠時,會使用「數據淘汰策略」,刪除部分數據。
可是並非針對 Redis 裏全部的數據,而是抽樣選取小部分「數據集」。
策略 | 描述 |
---|---|
Volatile-LRU | 從設置了過時時間的「數據集」中,刪除最近、最少使用的數據集 |
Volatile-TTL | 從設置了過時時間的「數據集」中,刪除即將要過時的數據。 |
Volatile-Random | 從設置了過時時間的「數據集」中,隨機刪除數據。 |
Always-LRU | 從「數據集」中刪除最近、最少使用的數據。 |
AllKeys-Random | 從「數據集」中隨機刪除數據。 |
Noeviction | 禁止刪除數據。 |
當 Redis 做爲緩存使用時,爲了保證緩存數據都是「熱數據」,能夠將 Redis 的最大內存設置爲緩存的大小,並使用 Always-LRU 策略。將最近最少使用的數據捨棄,保證緩存裏熱數據的「高命中率」。
至此,有關「數據庫」知識點的面試題就已告一段落,下次更新「網絡通訊方面」面試題。
全部內容均已上傳至「GitHub」倉庫,歡迎你們點擊原文查閱。
歡迎你們關注我的微信公衆號「PythonDeveloper」,全部內容第一時間更新於公衆號。
全部內容均爲本人一點一點敲出來的,不免會有錯字、語句不通順的地方,歡迎你們指正。
因本人水平有限,文章內容不免會有出錯、遺漏,歡迎你們評論指出,一塊兒進步。