最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

面試題百日百刷-Redis篇(二)

2021-07-09 22:24 作者:zjlala96  | 我要投稿

====Redis 的優(yōu)缺點(diǎn)?

優(yōu)點(diǎn):

a) 性能極高 – Redis 能支持超過 100K+ 每秒的讀寫頻率。

b) 豐富的數(shù)據(jù)類型 – Redis 支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。

c) 原子 – Redis 的所有操作都是原子性的,同時(shí) Redis 還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行。

·d)豐富的特性 – Redis 還支持 publish/subscribe, 通知, key 過期等等特性。

缺點(diǎn):

?a). 由于是內(nèi)存數(shù)據(jù)庫(kù),所以,單臺(tái)機(jī)器,存儲(chǔ)的數(shù)據(jù)量,跟機(jī)器本身的內(nèi)存大小有關(guān)。雖然 redis 本身有 key 過期策略,但是還是需要提前預(yù)估和節(jié)約內(nèi)存。如果內(nèi)存增長(zhǎng)過快,需要定期刪除數(shù)據(jù)。

?b). 如果進(jìn)行完整重同步,由于需要生成 rdb 文件,并進(jìn)行傳輸,會(huì)占用主機(jī)的 CPU,并會(huì)消耗現(xiàn)網(wǎng)的帶寬。不過 redis2.8 版本,已經(jīng)有部分重同步的功能,但是還是有可能有完整重同步的。比如,新上線的備機(jī)。

?c). 修改配置文件,進(jìn)行重啟,將硬盤中的數(shù)據(jù)加載進(jìn)內(nèi)存,時(shí)間比較久。在這個(gè)過程中,redis 不能提供服務(wù)。

?

====講一講Redis 的持久化?

RDB 持久化:該機(jī)制可以在指定的時(shí)間間隔內(nèi)生成數(shù)據(jù)集的時(shí)間點(diǎn)快照(point-in-time snapshot)。

AOF 持久化:記錄服務(wù)器執(zhí)行的所有寫操作命令,并在服務(wù)器啟動(dòng)時(shí),通過重新執(zhí)行這些命令來還原數(shù)據(jù)集。AOF 文件中的命令全部以 Redis 協(xié)議的格式來保存,新命令會(huì)被追加到文件的末尾。 Redis 還可以在后臺(tái)對(duì) AOF 文件進(jìn)行重寫(rewrite),使得 AOF 文件的體積不會(huì)超出保存數(shù)據(jù)集狀態(tài)所需的實(shí)際大小

無持久化:讓數(shù)據(jù)只在服務(wù)器運(yùn)行時(shí)存在。

同時(shí)應(yīng)用 AOF 和 RDB:當(dāng) Redis 重啟時(shí), 它會(huì)優(yōu)先使用 AOF 文件來還原數(shù)據(jù)集, 因?yàn)?AOF 文件保存的數(shù)據(jù)集通常比 RDB 文件所保存的數(shù)據(jù)集更完整。

?

====講一講RDB持久化和AOF持久化的優(yōu)缺點(diǎn)?

RDB 的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):RDB 是一個(gè)非常緊湊(compact)的文件,它保存了 Redis 在某個(gè)時(shí)間點(diǎn)上的數(shù)據(jù)集。 這種文件非常適合用于進(jìn)行備份: 比如說,你可以在最近的 24 小時(shí)內(nèi),每小時(shí)備份一次 RDB 文件,并且在每個(gè)月的每一天,也備份一個(gè) RDB 文件。 這樣的話,即使遇上問題,也可以隨時(shí)將數(shù)據(jù)集還原到不同的版本。RDB 非常適用于災(zāi)難恢復(fù)(disaster recovery):它只有一個(gè)文件,并且內(nèi)容都非常緊湊,可以(在加密后)將它傳送到別的數(shù)據(jù)中心,或者亞馬遜 S3 中。RDB 可以最大化 Redis 的性能:父進(jìn)程在保存 RDB 文件時(shí)唯一要做的就是 fork 出一個(gè)子進(jìn)程,然后這個(gè)子進(jìn)程就會(huì)處理接下來的所有保存工作,父進(jìn)程無須執(zhí)行任何磁盤 I/O 操作。RDB 在恢復(fù)大數(shù)據(jù)集時(shí)的速度比 AOF 的恢復(fù)速度要快。

缺點(diǎn):如果你需要盡量避免在服務(wù)器故障時(shí)丟失數(shù)據(jù),那么 RDB 不適合你。 雖然 Redis 允許你設(shè)置不同的保存點(diǎn)(save point)來控制保存 RDB 文件的頻率,但是,因?yàn)?RDB 文件需要保存整個(gè)數(shù)據(jù)集的狀態(tài), 所以它并不是一個(gè)輕松的操作。 因此你可能會(huì)至少 5 分鐘才保存一次 RDB 文件。 在這種情況下, 一旦發(fā)生故障停機(jī),你就可能會(huì)丟失好幾分鐘的數(shù)據(jù)。每次保存 RDB 的時(shí)候,Redis 都要 fork() 出一個(gè)子進(jìn)程,并由子進(jìn)程來進(jìn)行實(shí)際的持久化工作。在數(shù)據(jù)集比較龐大時(shí),fork() 可能會(huì)非常耗時(shí),造成服務(wù)器在某某毫秒內(nèi)停止

處理客戶端;如果數(shù)據(jù)集非常巨大,并且 CPU 時(shí)間非常緊張的話,那么這種停止時(shí)間甚至可能會(huì)長(zhǎng)達(dá)整整一秒。

AOF 的優(yōu)缺點(diǎn)。

優(yōu)點(diǎn):

1、使用 AOF 持久化會(huì)讓 Redis 變得非常耐久(much more durable):你可以設(shè)置不同的 fsync 策略,比如無 fsync ,每秒鐘一次 fsync ,或者每次執(zhí)行寫入命令時(shí) fsync 。 AOF 的默認(rèn)策略為每秒鐘 fsync 一次,在這種配置下,Redis 仍然可以保持良好的性能,并且就算發(fā)生故障停機(jī),也最多只會(huì)丟失一秒鐘的數(shù)據(jù)( fsync 會(huì)在后臺(tái)線程執(zhí)行,所以主線程可以繼續(xù)努力地處理命令請(qǐng)求)。AOF 文件是一個(gè)只進(jìn)行追加操作的日志文件(append only

log), 因此對(duì) AOF 文件的寫入不需要進(jìn)行 seek , 即使日志因?yàn)槟承┰蚨宋磳懭胪暾拿睿ū热鐚懭霑r(shí)磁盤已滿,寫入中途停機(jī),等等), redis-check-aof 工具也可以輕易地修復(fù)這種問題。

2、Redis 可以在 AOF 文件體積變得過大時(shí),自動(dòng)地在后臺(tái)對(duì) AOF 進(jìn)行重寫: 重寫后的新 AOF 文件包含了恢復(fù)當(dāng)前數(shù)據(jù)集所需的最小命令集合。 整個(gè)重寫操作是絕對(duì)安全的,因?yàn)?Redis 在創(chuàng)建新 AOF 文件的過程中,會(huì)繼續(xù)將命令追加到現(xiàn)有的 AOF 文件里面,即使重寫過程中發(fā)生停機(jī),現(xiàn)有的 AOF 文件也不會(huì)丟失。 而一旦新 AOF 文件創(chuàng)建完畢,Redis 就會(huì)從舊 AOF 文件切換到新 AOF 文件,并開始對(duì)新 AOF 文件進(jìn)行追加操作。

缺點(diǎn):

對(duì)于相同的數(shù)據(jù)集來說,AOF 文件的體積通常要大于 RDB 文件的體積。根據(jù)所使用的 fsync 策略,AOF 的速度可能會(huì)慢于 RDB 。 在一般情況下, 每秒 fsync 的性能依然非常高, 而關(guān)閉 fsync 可以讓 AOF 的速度和 RDB 一樣快, 即使在高負(fù)荷之下也是如此。 不過在處理巨大的寫入載入時(shí),RDB 可以提供更有保證的最大延遲時(shí)間(latency)。

AOF 在過去曾經(jīng)發(fā)生過這樣的 bug : 因?yàn)閭€(gè)別命令的原因,導(dǎo)致 AOF 文件在重新載入時(shí),無法將數(shù)據(jù)集恢復(fù)成保存時(shí)的原樣。 (舉個(gè)例子,阻塞命令 BRPOPLPUSH 就曾經(jīng)引起過這樣的 bug 。) 測(cè)試套件里為這種情況添加了測(cè)試: 它們會(huì)自動(dòng)生成隨機(jī)的、復(fù)雜的數(shù)據(jù)集, 并通過重新載入這些數(shù)據(jù)來確保一切正常。 雖然這種 bug 在AOF 文件中并不常見, 但是對(duì)比來說, RDB 幾乎是不可能出現(xiàn)這種 bug 的。

?

====Redis 是單進(jìn)程單線程的嗎?

Redis 是單進(jìn)程單線程的, redis 利用隊(duì)列技術(shù)將并發(fā)訪問變?yōu)榇性L問, 消除了傳統(tǒng)數(shù)據(jù)庫(kù)串行控制的開銷。

?

====Redis中一個(gè)字符串類型的值能存儲(chǔ)最大容量是多少?

512M

?

====redis 過期鍵的刪除策略?

1、定時(shí)刪除:在設(shè)置鍵的過期時(shí)間的同時(shí),創(chuàng)建一個(gè)定時(shí)器 timer). 讓定時(shí)器在鍵的過期時(shí)間來臨時(shí),立即執(zhí)行對(duì)鍵的刪除操作。

2、惰性刪除:放任鍵過期不管,但是每次從鍵空間中獲取鍵時(shí),都檢查取得的鍵是 否過期, 如果過期的話, 就刪除該鍵;如果沒有過期, 就返回該鍵。

3、定期刪除:每隔一段時(shí)間程序就對(duì)數(shù)據(jù)庫(kù)進(jìn)行一次檢查,刪除里面的過期鍵。至 于要?jiǎng)h除多少過期鍵, 以及要檢查多少個(gè)數(shù)據(jù)庫(kù), 則由算法決定。

?

====Redis有哪幾種回收策略(淘汰策略)?

volatile-lru:從已設(shè)置過期時(shí)間的數(shù)據(jù)集( server.db[i].expires)中挑選最近最少使用的數(shù)據(jù)淘汰

volatile-ttl: 從已設(shè)置過期時(shí)間的數(shù)據(jù)集( server.db[i].expires) 中挑選將要過期的數(shù)據(jù)淘汰

volatile-random: 從已設(shè)置過期時(shí)間的數(shù)據(jù)集( server.db[i].expires) 中任意選擇數(shù)據(jù)淘汰

allkeys-lru: 從數(shù)據(jù)集( server.db[i].dict) 中挑選最近最少使用的數(shù)據(jù)淘汰

allkeys-random: 從數(shù)據(jù)集( server.db[i].dict) 中任意選擇數(shù)據(jù)淘汰

no-enviction( 驅(qū)逐) : 禁止驅(qū)逐數(shù)據(jù)

注意這里的 6 種機(jī)制,volatile 和 allkeys 規(guī)定了是對(duì)已設(shè)置過期時(shí)間的數(shù)據(jù)集淘汰數(shù)據(jù)還是從全部數(shù)據(jù)集淘汰數(shù)據(jù), 后面的 lru、ttl 以及 random 是三種不同的淘汰策略, 再加上一種 no-enviction 永不回收的策略。

使用策略規(guī)則:

1、如果數(shù)據(jù)呈現(xiàn)冪律分布,也就是一部分?jǐn)?shù)據(jù)訪問頻率高,一部分?jǐn)?shù)據(jù)訪問頻率 低, 則使用 allkeyslru

2、如果數(shù)據(jù)呈現(xiàn)平等分布, 也就是所有的數(shù)據(jù)訪問頻率都相同, 則使用allkeys-random

?

====Redis 的同步機(jī)制了解么?

Redis 可以使用主從同步,從從同步。第一次同步時(shí),主節(jié)點(diǎn)做一次 bgsave, 并同時(shí)將后續(xù)修改操作記錄到內(nèi)存 buffer, 待完成后將 rdb 文件全量同步到復(fù)制節(jié)點(diǎn), 復(fù)制節(jié)點(diǎn)接受完成后將 rdb 鏡像加載到內(nèi)存。加載完成后, 再通知主節(jié)點(diǎn)將期間修改的操作記錄同步到復(fù)制節(jié)點(diǎn)進(jìn)行重放就完成了同步過程。

面試題百日百刷-Redis篇(二)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
论坛| 如皋市| 哈密市| 雷波县| 雷州市| 威宁| 义乌市| 扶沟县| 嘉禾县| 昆明市| 安康市| 青海省| 茶陵县| 揭西县| 镇平县| 南平市| 漳平市| 玉林市| 济源市| 万年县| 建昌县| 鹿泉市| 子长县| 贵港市| 通州区| 桐庐县| 杂多县| 梧州市| 绥棱县| 卓尼县| 禹州市| 防城港市| 东明县| 隆昌县| 洛宁县| 上蔡县| 华宁县| 乌海市| 黄冈市| 澎湖县| 乐平市|