摘要:說一下是怎樣將數(shù)據(jù)持久化的為某一時刻下的數(shù)據(jù)庫里的內(nèi)容拍一張照片快照,并將該照片寫進磁盤中,實現(xiàn)數(shù)據(jù)持久化。通過寫命令,將數(shù)據(jù)追加到文件末尾,實現(xiàn)數(shù)據(jù)持久化。至此,有關(guān)數(shù)據(jù)庫知識點的面試題就已告一段落,下次更新網(wǎng)絡(luò)通信方面面試題。
1.說一說 Redis 是什么
Redis 是一種「Key-Value」的內(nèi)存型、非關(guān)系型數(shù)據(jù)庫,屬于 NoSQL 的一種。
Redis 的讀寫速度特別快,特別適合讀寫頻繁的場景。
Redis 支持主從復(fù)制,支持數(shù)據(jù)持久化。
2.知道 Redis 有哪些常用數(shù)據(jù)類型嗎String
List
Hash
Set
Zset
3.說一下 Redis 用來做什么利用 String,可以很容易實現(xiàn)「計數(shù)器」功能。
利用 List ,可以實現(xiàn)「粉絲列表」功能。
利用 Hash,可以實現(xiàn)「瀏覽記錄」功能。
利用 Set 的并集、合集特性,可以實現(xiàn)「共同好友」功能。
利用 Zset 的排序特性,可以實現(xiàn)「排行榜」功能。
由于 Redis 的高速讀寫特性,可以充當(dāng)「緩存」。
充當(dāng)「消息隊列」,如 Celery 中就是用 Redis 充當(dāng)中間人,生產(chǎn)者和消費者都是向 Redis 中發(fā)布任務(wù)和接受任務(wù)。
4.說一下 Redis 是怎樣將數(shù)據(jù)持久化的RDB
為某一時刻下的 Redis 數(shù)據(jù)庫里的內(nèi)容拍一張照片(快照),并將該照片寫進磁盤中,實現(xiàn)數(shù)據(jù)持久化。
當(dāng)數(shù)據(jù)庫崩潰時,會丟失最后一次快照的內(nèi)容。
如果數(shù)據(jù)庫內(nèi)容過大,那么生成快照時間會很長。
AOF
通過寫命令,將數(shù)據(jù)追加到(Append Only File)文件末尾,實現(xiàn)數(shù)據(jù)持久化。
但是使用 AOF,需要解決同步問題。
因為文件的寫入不會立馬執(zhí)行,而是先將寫入的內(nèi)容放置「緩存區(qū)」,等待操作系統(tǒng)決定何時將緩存區(qū)的內(nèi)容寫入磁盤。
Redis 擁有三種同步策略:Always、Everysec、No。
絕大多數(shù)情況下都是使用第二種策略,每隔一秒鐘同步一次,這樣就算數(shù)據(jù)庫崩潰也只會損失一秒鐘的數(shù)據(jù)。
而其他兩種策略,要么對數(shù)據(jù)庫的壓力過大,過多降低數(shù)據(jù)庫的性能,要么具有丟失數(shù)據(jù)量過大的風(fēng)險。
5.了解 Redis 主從復(fù)制嗎使用slaveof host port設(shè)置主從服務(wù)器。
Redis 的主從服務(wù)器有點像樹結(jié)構(gòu),從服務(wù)器只能有一個主服務(wù)器。
Redis 不支持「主-主復(fù)制」。
Redis 主從復(fù)制通過利用 RDB 快照持久化的特性,將某一時刻下主服務(wù)器的內(nèi)容生成快照,然后發(fā)送給從服務(wù)器,并利用緩存區(qū)保存在這期間里進行的「寫命令」,等待快照發(fā)送完畢之后,再將寫命令發(fā)送給從服務(wù)器。
從服務(wù)器在接收到快照之后,會將自身的數(shù)據(jù)全部丟棄,載入快照里的數(shù)據(jù),載入完畢之后,再執(zhí)行主服務(wù)器的寫命令。
6. 說一下 Redis 和 Memcache 的區(qū)別Redis | Memcache |
---|---|
支持 String、List、Hash、Set、Zset | 只支持 String |
支持數(shù)據(jù)持久化 | 不支持 |
支持事務(wù) | 不支持 |
支持主從復(fù)制 | 不支持 |
支持分布式 | 不支持 |
支持將數(shù)據(jù)交換到磁盤中 | 不支持 |
單進程、單線程 IO 多路復(fù)用 | 多線程、非阻塞 IO |
總結(jié)為一點,只用得到 Redis 里的 String 類型存儲數(shù)據(jù)時,使用 Memcache。
除此之外,使用 Redis。
7. 了解 Redis 是怎樣保證熱數(shù)據(jù)的嗎Redis 是內(nèi)存型的數(shù)據(jù)庫,可以設(shè)置最大內(nèi)存,當(dāng)內(nèi)存不夠時,會使用「數(shù)據(jù)淘汰策略」,刪除部分數(shù)據(jù)。
但是并不是針對 Redis 里所有的數(shù)據(jù),而是抽樣選取小部分「數(shù)據(jù)集」。
策略 | 描述 |
---|---|
Volatile-LRU | 從設(shè)置了過期時間的「數(shù)據(jù)集」中,刪除最近、最少使用的數(shù)據(jù)集 |
Volatile-TTL | 從設(shè)置了過期時間的「數(shù)據(jù)集」中,刪除即將要過期的數(shù)據(jù)。 |
Volatile-Random | 從設(shè)置了過期時間的「數(shù)據(jù)集」中,隨機刪除數(shù)據(jù)。 |
Always-LRU | 從「數(shù)據(jù)集」中刪除最近、最少使用的數(shù)據(jù)。 |
AllKeys-Random | 從「數(shù)據(jù)集」中隨機刪除數(shù)據(jù)。 |
Noeviction | 禁止刪除數(shù)據(jù)。 |
當(dāng) Redis 作為緩存使用時,為了保證緩存數(shù)據(jù)都是「熱數(shù)據(jù)」,可以將 Redis 的最大內(nèi)存設(shè)置為緩存的大小,并使用 Always-LRU 策略。將最近最少使用的數(shù)據(jù)舍棄,保證緩存里熱數(shù)據(jù)的「高命中率」。
至此,有關(guān)「數(shù)據(jù)庫」知識點的面試題就已告一段落,下次更新「網(wǎng)絡(luò)通信方面」面試題。
所有內(nèi)容均已上傳至「GitHub」倉庫,歡迎大家點擊原文查閱。
歡迎大家關(guān)注個人微信公眾號「PythonDeveloper」,所有內(nèi)容第一時間更新于公眾號。
所有內(nèi)容均為本人一點一點敲出來的,難免會有錯字、語句不通順的地方,歡迎大家指正。
因本人水平有限,文章內(nèi)容難免會有出錯、遺漏,歡迎大家評論指出,一起進步。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45261.html
摘要:說一下是怎樣將數(shù)據(jù)持久化的為某一時刻下的數(shù)據(jù)庫里的內(nèi)容拍一張照片快照,并將該照片寫進磁盤中,實現(xiàn)數(shù)據(jù)持久化。通過寫命令,將數(shù)據(jù)追加到文件末尾,實現(xiàn)數(shù)據(jù)持久化。至此,有關(guān)數(shù)據(jù)庫知識點的面試題就已告一段落,下次更新網(wǎng)絡(luò)通信方面面試題。 1.說一說 Redis 是什么 Redis 是一種「Key-Value」的內(nèi)存型、非關(guān)系型數(shù)據(jù)庫,屬于 NoSQL 的一種。 Redis 的讀寫速度特別快,...
摘要:最近在看的源碼,不得不說的是,的源碼十分優(yōu)雅簡潔,下面就來分享下的緩存利用的算法算法。關(guān)于算法的具體流程,可以來看下這個,這個可視化過程,模擬了算法進行調(diào)度的過程。 最近在看Vue的源碼,不得不說的是,Vue的源碼十分優(yōu)雅簡潔,下面就來分享下Vue的緩存利用的算法LRU算法。 LRU算法 LRU是Least recently used的簡寫,主要原理是根據(jù)歷史訪問記錄來淘汰數(shù)據(jù),說白了...
摘要:個高級多線程面試題及回答后端掘金在任何面試當(dāng)中多線程和并發(fā)方面的問題都是必不可少的一部分。默認為提供了年杭州面試經(jīng)歷掘金想換個環(huán)境試試覺得做的不是自己想要的。源碼網(wǎng)站安居客項目架構(gòu)演進掘金本文已授權(quán)微信公眾號獨家發(fā)布。 15 個高級 Java 多線程面試題及回答 - 后端 - 掘金在任何Java面試當(dāng)中多線程和并發(fā)方面的問題都是必不可少的一部分。如果你想獲得任何股票投資銀行的前臺資訊職...
閱讀 1118·2021-11-23 09:51
閱讀 1081·2021-10-18 13:31
閱讀 2991·2021-09-22 16:06
閱讀 4284·2021-09-10 11:19
閱讀 2206·2019-08-29 17:04
閱讀 437·2019-08-29 10:55
閱讀 2485·2019-08-26 16:37
閱讀 3381·2019-08-26 13:29