1.說一說 Redis 是什么
Redis 是一種「Key-Value」的內存型、非關系型數據庫,屬于 NoSQL 的一種。
Redis 的讀寫速度特別快,特別適合讀寫頻繁的場景。
Redis 支持主從復制,支持數據持久化。
2.知道 Redis 有哪些常用數據類型嗎
- String
- List
- Hash
- Set
- Zset
3.說一下 Redis 用來做什么
- 利用 String,可以很容易實現「計數器」功能。
- 利用 List ,可以實現「粉絲列表」功能。
- 利用 Hash,可以實現「瀏覽記錄」功能。
- 利用 Set 的并集、合集特性,可以實現「共同好友」功能。
- 利用 Zset 的排序特性,可以實現「排行榜」功能。
- 由于 Redis 的高速讀寫特性,可以充當「緩存」。
- 充當「消息隊列」,如 Celery 中就是用 Redis 充當中間人,生產者和消費者都是向 Redis 中發布任務和接受任務。
4.說一下 Redis 是怎樣將數據持久化的
-
RDB
為某一時刻下的 Redis 數據庫里的內容拍一張照片(快照),并將該照片寫進磁盤中,實現數據持久化。
當數據庫崩潰時,會丟失最后一次快照的內容。
如果數據庫內容過大,那么生成快照時間會很長。
-
AOF
通過寫命令,將數據追加到(Append Only File)文件末尾,實現數據持久化。
但是使用 AOF,需要解決同步問題。
因為文件的寫入不會立馬執行,而是先將寫入的內容放置「緩存區」,等待操作系統決定何時將緩存區的內容寫入磁盤。
Redis 擁有三種同步策略:Always、Everysec、No。
絕大多數情況下都是使用第二種策略,每隔一秒鐘同步一次,這樣就算數據庫崩潰也只會損失一秒鐘的數據。
而其他兩種策略,要么對數據庫的壓力過大,過多降低數據庫的性能,要么具有丟失數據量過大的風險。
5.了解 Redis 主從復制嗎
使用
slaveof host port
設置主從服務器。
Redis 的主從服務器有點像樹結構,從服務器只能有一個主服務器。
Redis 不支持「主-主復制」。
Redis 主從復制通過利用 RDB 快照持久化的特性,將某一時刻下主服務器的內容生成快照,然后發送給從服務器,并利用緩存區保存在這期間里進行的「寫命令」,等待快照發送完畢之后,再將寫命令發送給從服務器。
從服務器在接收到快照之后,會將自身的數據全部丟棄,載入快照里的數據,載入完畢之后,再執行主服務器的寫命令。
6. 說一下 Redis 和 Memcache 的區別
Redis | Memcache |
---|---|
支持 String、List、Hash、Set、Zset | 只支持 String |
支持數據持久化 | 不支持 |
支持事務 | 不支持 |
支持主從復制 | 不支持 |
支持分布式 | 不支持 |
支持將數據交換到磁盤中 | 不支持 |
單進程、單線程 IO 多路復用 | 多線程、非阻塞 IO |
總結為一點,只用得到 Redis 里的 String 類型存儲數據時,使用 Memcache。
除此之外,使用 Redis。
7. 了解 Redis 是怎樣保證熱數據的嗎
Redis 是內存型的數據庫,可以設置最大內存,當內存不夠時,會使用「數據淘汰策略」,刪除部分數據。
但是并不是針對 Redis 里所有的數據,而是抽樣選取小部分「數據集」。
策略 | 描述 |
---|---|
Volatile-LRU | 從設置了過期時間的「數據集」中,刪除最近、最少使用的數據集 |
Volatile-TTL | 從設置了過期時間的「數據集」中,刪除即將要過期的數據。 |
Volatile-Random | 從設置了過期時間的「數據集」中,隨機刪除數據。 |
Always-LRU | 從「數據集」中刪除最近、最少使用的數據。 |
AllKeys-Random | 從「數據集」中隨機刪除數據。 |
Noeviction | 禁止刪除數據。 |
當 Redis 作為緩存使用時,為了保證緩存數據都是「熱數據」,可以將 Redis 的最大內存設置為緩存的大小,并使用 Always-LRU 策略。將最近最少使用的數據舍棄,保證緩存里熱數據的「高命中率」。
至此,有關「數據庫」知識點的面試題就已告一段落,下次更新「網絡通信方面」面試題。
所有內容均已上傳至「GitHub」倉庫,歡迎大家點擊原文查閱。
歡迎大家關注個人微信公眾號「 PythonDeveloper 」,所有內容 第一時間更新于公眾號 。
所有內容均為本人一點一點敲出來的,難免會有錯字、語句不通順的地方,歡迎大家指正。
因本人水平有限,文章內容難免會有出錯、遺漏,歡迎大家評論指出,一起進步。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
