<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          快手面試官:Redis變慢了,如何快速排查?

          共 7498字,需瀏覽 15分鐘

           ·

          2021-11-08 14:28

          點(diǎn)擊關(guān)注公眾號(hào),回復(fù)“2T”獲取2TB學(xué)習(xí)資源!

          互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù) 2T 有特別禮包

          來(lái)源:http://yulb8.cn/fo71E

          上一篇:清華大學(xué):2021 元宇宙研究報(bào)告!

          Redis作為內(nèi)存數(shù)據(jù)庫(kù),擁有非常高的性能,單個(gè)實(shí)例的QPS能夠達(dá)到10W左右。但我們?cè)谑褂肦edis時(shí),經(jīng)常時(shí)不時(shí)會(huì)出現(xiàn)訪問(wèn)延遲很大的情況,如果你不知道Redis的內(nèi)部實(shí)現(xiàn)原理,在排查問(wèn)題時(shí)就會(huì)一頭霧水。


          很多時(shí)候,Redis出現(xiàn)訪問(wèn)延遲變大,都與我們的使用不當(dāng)或運(yùn)維不合理導(dǎo)致的。


          使用復(fù)雜度高的命令


          如果在使用Redis時(shí),發(fā)現(xiàn)訪問(wèn)延遲突然增大,如何進(jìn)行排查?


          首先,第一步,建議你去查看一下Redis的慢日志。Redis提供了慢日志命令的統(tǒng)計(jì)功能,我們通過(guò)以下設(shè)置,就可以查看有哪些命令在執(zhí)行時(shí)延遲比較大。


          首先設(shè)置Redis的慢日志閾值,只有超過(guò)閾值的命令才會(huì)被記錄,這里的單位是微妙,例如設(shè)置慢日志的閾值為5毫秒,同時(shí)設(shè)置只保留最近1000條慢日志記錄:
          # 命令執(zhí)行超過(guò)5毫秒記錄慢日志CONFIG SET slowlog-log-slower-than 5000# 只保留最近1000條慢日志CONFIG SET slowlog-max-len 1000

          設(shè)置完成之后,所有執(zhí)行的命令如果延遲大于5毫秒,都會(huì)被Redis記錄下來(lái),我們執(zhí)行SLOWLOG get 5查詢最近5條慢日志:
          127.0.0.1:6379> SLOWLOG get 51) 1) (integer) 32693       # 慢日志ID   2) (integer) 1593763337  # 執(zhí)行時(shí)間   3) (integer) 5299        # 執(zhí)行耗時(shí)(微妙)   4) 1) "LRANGE"           # 具體執(zhí)行的命令和參數(shù)      2) "user_list_2000"      3) "0"      4) "-1"2) 1) (integer) 32692   2) (integer) 1593763337   3) (integer) 5044   4) 1) "GET"      2) "book_price_1000"...

          通過(guò)查看慢日志記錄,我們就可以知道在什么時(shí)間執(zhí)行哪些命令比較耗時(shí),如果你的業(yè)務(wù)經(jīng)常使用O(n)以上復(fù)雜度的命令,例如sort、sunion、zunionstore,或者在執(zhí)行O(n)命令時(shí)操作的數(shù)據(jù)量比較大,這些情況下Redis處理數(shù)據(jù)時(shí)就會(huì)很耗時(shí)。


          如果你的服務(wù)請(qǐng)求量并不大,但Redis實(shí)例的CPU使用率很高,很有可能是使用了復(fù)雜度高的命令導(dǎo)致的。


          解決方案就是,不使用這些復(fù)雜度較高的命令,并且一次不要獲取太多的數(shù)據(jù),每次盡量操作少量的數(shù)據(jù),讓Redis可以及時(shí)處理返回。


          存儲(chǔ)大key


          如果查詢慢日志發(fā)現(xiàn),并不是復(fù)雜度較高的命令導(dǎo)致的,例如都是SET、DELETE操作出現(xiàn)在慢日志記錄中,那么你就要懷疑是否存在Redis寫(xiě)入了大key的情況。


          Redis在寫(xiě)入數(shù)據(jù)時(shí),需要為新的數(shù)據(jù)分配內(nèi)存,當(dāng)從Redis中刪除數(shù)據(jù)時(shí),它會(huì)釋放對(duì)應(yīng)的內(nèi)存空間。


          如果一個(gè)key寫(xiě)入的數(shù)據(jù)非常大,Redis在分配內(nèi)存時(shí)也會(huì)比較耗時(shí)。同樣的,當(dāng)刪除這個(gè)key的數(shù)據(jù)時(shí),釋放內(nèi)存也會(huì)耗時(shí)比較久


          你需要檢查你的業(yè)務(wù)代碼,是否存在寫(xiě)入大key的情況,需要評(píng)估寫(xiě)入數(shù)據(jù)量的大小,業(yè)務(wù)層應(yīng)該避免一個(gè)key存入過(guò)大的數(shù)據(jù)量。


          那么有沒(méi)有什么辦法可以掃描現(xiàn)在Redis中是否存在大key的數(shù)據(jù)嗎?


          Redis也提供了掃描大key的方法:

          redis-cli -h $host -p $port --bigkeys -i 0.01

          使用上面的命令就可以掃描出整個(gè)實(shí)例key大小的分布情況,它是以類型維度來(lái)展示的。


          需要注意的是當(dāng)我們?cè)诰€上實(shí)例進(jìn)行大key掃描時(shí),Redis的QPS會(huì)突增,為了降低掃描過(guò)程中對(duì)Redis的影響,我們需要控制掃描的頻率,使用-i參數(shù)控制即可,它表示掃描過(guò)程中每次掃描的時(shí)間間隔,單位是秒。


          使用這個(gè)命令的原理,其實(shí)就是Redis在內(nèi)部執(zhí)行scan命令,遍歷所有key,然后針對(duì)不同類型的key執(zhí)行strlen、llen、hlen、scard、zcard來(lái)獲取字符串的長(zhǎng)度以及容器類型(list/dict/set/zset)的元素個(gè)數(shù)。


          而對(duì)于容器類型的key,只能掃描出元素最多的key,但元素最多的key不一定占用內(nèi)存最多,這一點(diǎn)需要我們注意下。不過(guò)使用這個(gè)命令一般我們是可以對(duì)整個(gè)實(shí)例中key的分布情況有比較清晰的了解。


          針對(duì)大key的問(wèn)題,Redis官方在4.0版本推出了lazy-free的機(jī)制,用于異步釋放大key的內(nèi)存,降低對(duì)Redis性能的影響。即使這樣,我們也不建議使用大key,大key在集群的遷移過(guò)程中,也會(huì)影響到遷移的性能,這個(gè)后面在介紹集群相關(guān)的文章時(shí),會(huì)再詳細(xì)介紹到。


          集中過(guò)期


          有時(shí)你會(huì)發(fā)現(xiàn),平時(shí)在使用Redis時(shí)沒(méi)有延時(shí)比較大的情況,但在某個(gè)時(shí)間點(diǎn)突然出現(xiàn)一波延時(shí),而且報(bào)慢的時(shí)間點(diǎn)很有規(guī)律,例如某個(gè)整點(diǎn),或者間隔多久就會(huì)發(fā)生一次。


          如果出現(xiàn)這種情況,就需要考慮是否存在大量key集中過(guò)期的情況。


          如果有大量的key在某個(gè)固定時(shí)間點(diǎn)集中過(guò)期,在這個(gè)時(shí)間點(diǎn)訪問(wèn)Redis時(shí),就有可能導(dǎo)致延遲增加。


          Redis的過(guò)期策略采用主動(dòng)過(guò)期+懶惰過(guò)期兩種策略:


          **主動(dòng)過(guò)期:**Redis內(nèi)部維護(hù)一個(gè)定時(shí)任務(wù),默認(rèn)每隔100毫秒會(huì)從過(guò)期字典中隨機(jī)取出20個(gè)key,刪除過(guò)期的key,如果過(guò)期key的比例超過(guò)了25%,則繼續(xù)獲取20個(gè)key,刪除過(guò)期的key,循環(huán)往復(fù),直到過(guò)期key的比例下降到25%或者這次任務(wù)的執(zhí)行耗時(shí)超過(guò)了25毫秒,才會(huì)退出循環(huán)


          **懶惰過(guò)期:**只有當(dāng)訪問(wèn)某個(gè)key時(shí),才判斷這個(gè)key是否已過(guò)期,如果已經(jīng)過(guò)期,則從實(shí)例中刪除


          注意,Redis的主動(dòng)過(guò)期的定時(shí)任務(wù),也是在Redis主線程中執(zhí)行的,也就是說(shuō)如果在執(zhí)行主動(dòng)過(guò)期的過(guò)程中,出現(xiàn)了需要大量刪除過(guò)期key的情況,那么在業(yè)務(wù)訪問(wèn)時(shí),必須等這個(gè)過(guò)期任務(wù)執(zhí)行結(jié)束,才可以處理業(yè)務(wù)請(qǐng)求。此時(shí)就會(huì)出現(xiàn),業(yè)務(wù)訪問(wèn)延時(shí)增大的問(wèn)題,最大延遲為25毫秒。


          而且這個(gè)訪問(wèn)延遲的情況,不會(huì)記錄在慢日志里。慢日志中只記錄真正執(zhí)行某個(gè)命令的耗時(shí),Redis主動(dòng)過(guò)期策略執(zhí)行在操作命令之前,如果操作命令耗時(shí)達(dá)不到慢日志閾值,它是不會(huì)計(jì)算在慢日志統(tǒng)計(jì)中的,但我們的業(yè)務(wù)卻感到了延遲增大。


          此時(shí)你需要檢查你的業(yè)務(wù),是否真的存在集中過(guò)期的代碼,一般集中過(guò)期使用的命令是expireat或pexpireat命令,在代碼中搜索這個(gè)關(guān)鍵字就可以了。


          如果你的業(yè)務(wù)確實(shí)需要集中過(guò)期掉某些key,又不想導(dǎo)致Redis發(fā)生抖動(dòng),有什么優(yōu)化方案?


          解決方案是,在集中過(guò)期時(shí)增加一個(gè)隨機(jī)時(shí)間,把這些需要過(guò)期的key的時(shí)間打散即可


          偽代碼可以這么寫(xiě):

          # 在過(guò)期時(shí)間點(diǎn)之后的5分鐘內(nèi)隨機(jī)過(guò)期掉redis.expireat(key, expire_time + random(300))

          這樣Redis在處理過(guò)期時(shí),不會(huì)因?yàn)榧袆h除key導(dǎo)致壓力過(guò)大,阻塞主線程。


          另外,除了業(yè)務(wù)使用需要注意此問(wèn)題之外,還可以通過(guò)運(yùn)維手段來(lái)及時(shí)發(fā)現(xiàn)這種情況。


          做法是我們需要把Redis的各項(xiàng)運(yùn)行數(shù)據(jù)監(jiān)控起來(lái),執(zhí)行info可以拿到所有的運(yùn)行數(shù)據(jù),在這里我們需要重點(diǎn)關(guān)注expired_keys這一項(xiàng),它代表整個(gè)實(shí)例到目前為止,累計(jì)刪除過(guò)期key的數(shù)量。


          我們需要對(duì)這個(gè)指標(biāo)監(jiān)控,當(dāng)在很短時(shí)間內(nèi)這個(gè)指標(biāo)出現(xiàn)突增時(shí),需要及時(shí)報(bào)警出來(lái),然后與業(yè)務(wù)報(bào)慢的時(shí)間點(diǎn)對(duì)比分析,確認(rèn)時(shí)間是否一致,如果一致,則可以認(rèn)為確實(shí)是因?yàn)檫@個(gè)原因?qū)е碌难舆t增大。


          實(shí)例內(nèi)存達(dá)到上限


          有時(shí)我們把Redis當(dāng)做純緩存使用,就會(huì)給實(shí)例設(shè)置一個(gè)內(nèi)存上限maxmemory,然后開(kāi)啟LRU淘汰策略。


          當(dāng)實(shí)例的內(nèi)存達(dá)到了maxmemory后,你會(huì)發(fā)現(xiàn)之后的每次寫(xiě)入新的數(shù)據(jù),有可能變慢了。


          導(dǎo)致變慢的原因是,當(dāng)Redis內(nèi)存達(dá)到maxmemory后,每次寫(xiě)入新的數(shù)據(jù)之前,必須先踢出一部分?jǐn)?shù)據(jù),讓內(nèi)存維持在maxmemory之下。


          這個(gè)踢出舊數(shù)據(jù)的邏輯也是需要消耗時(shí)間的,而具體耗時(shí)的長(zhǎng)短,要取決于配置的淘汰策略:



          具體使用哪種策略,需要根據(jù)業(yè)務(wù)場(chǎng)景來(lái)決定。


          我們最常使用的一般是allkeys-lru或volatile-lru策略,它們的處理邏輯是,每次從實(shí)例中隨機(jī)取出一批key(可配置),然后淘汰一個(gè)最少訪問(wèn)的key,之后把剩下的key暫存到一個(gè)池子中,繼續(xù)隨機(jī)取出一批key,并與之前池子中的key比較,再淘汰一個(gè)最少訪問(wèn)的key。以此循環(huán),直到內(nèi)存降到maxmemory之下。


          如果使用的是allkeys-random或volatile-random策略,那么就會(huì)快很多,因?yàn)槭请S機(jī)淘汰,那么就少了比較key訪問(wèn)頻率時(shí)間的消耗了,隨機(jī)拿出一批key后直接淘汰即可,因此這個(gè)策略要比上面的LRU策略執(zhí)行快一些。


          但以上這些邏輯都是在訪問(wèn)Redis時(shí),真正命令執(zhí)行之前執(zhí)行的,也就是它會(huì)影響我們?cè)L問(wèn)Redis時(shí)執(zhí)行的命令。


          另外,如果此時(shí)Redis實(shí)例中有存儲(chǔ)大key,那么在淘汰大key釋放內(nèi)存時(shí),這個(gè)耗時(shí)會(huì)更加久,延遲更大,這需要我們格外注意。


          如果你的業(yè)務(wù)訪問(wèn)量非常大,并且必須設(shè)置maxmemory限制實(shí)例的內(nèi)存上限,同時(shí)面臨淘汰key導(dǎo)致延遲增大的的情況,要想緩解這種情況,除了上面說(shuō)的避免存儲(chǔ)大key、使用隨機(jī)淘汰策略之外,也可以考慮拆分實(shí)例的方法來(lái)緩解,拆分實(shí)例可以把一個(gè)實(shí)例淘汰key的壓力分?jǐn)偟蕉鄠€(gè)實(shí)例上,可以在一定程度降低延遲。


          fork耗時(shí)嚴(yán)重


          如果你的Redis開(kāi)啟了自動(dòng)生成RDB和AOF重寫(xiě)功能,那么有可能在后臺(tái)生成RDB和AOF重寫(xiě)時(shí)導(dǎo)致Redis的訪問(wèn)延遲增大,而等這些任務(wù)執(zhí)行完畢后,延遲情況消失。


          遇到這種情況,一般就是執(zhí)行生成RDB和AOF重寫(xiě)任務(wù)導(dǎo)致的。


          生成RDB和AOF都需要父進(jìn)程fork出一個(gè)子進(jìn)程進(jìn)行數(shù)據(jù)的持久化,在fork執(zhí)行過(guò)程中,父進(jìn)程需要拷貝內(nèi)存頁(yè)表給子進(jìn)程,如果整個(gè)實(shí)例內(nèi)存占用很大,那么需要拷貝的內(nèi)存頁(yè)表會(huì)比較耗時(shí),此過(guò)程會(huì)消耗大量的CPU資源,在完成fork之前,整個(gè)實(shí)例會(huì)被阻塞住,無(wú)法處理任何請(qǐng)求,如果此時(shí)CPU資源緊張,那么fork的時(shí)間會(huì)更長(zhǎng),甚至達(dá)到秒級(jí)。這會(huì)嚴(yán)重影響Redis的性能。


          具體原理也可以參考我之前寫(xiě)的文章:Redis持久化是如何做的?RDB和AOF對(duì)比分析。


          我們可以執(zhí)行info命令,查看最后一次fork執(zhí)行的耗時(shí)latest_fork_usec,單位微妙。這個(gè)時(shí)間就是整個(gè)實(shí)例阻塞無(wú)法處理請(qǐng)求的時(shí)間。


          除了因?yàn)閭浞莸脑蛏蒖DB之外,在主從節(jié)點(diǎn)第一次建立數(shù)據(jù)同步時(shí),主節(jié)點(diǎn)也會(huì)生成RDB文件給從節(jié)點(diǎn)進(jìn)行一次全量同步,這時(shí)也會(huì)對(duì)Redis產(chǎn)生性能影響。


          要想避免這種情況,我們需要規(guī)劃好數(shù)據(jù)備份的周期,建議在從節(jié)點(diǎn)上執(zhí)行備份,而且最好放在低峰期執(zhí)行。如果對(duì)于丟失數(shù)據(jù)不敏感的業(yè)務(wù),那么不建議開(kāi)啟AOF和AOF重寫(xiě)功能。


          另外,fork的耗時(shí)也與系統(tǒng)有關(guān),如果把Redis部署在虛擬機(jī)上,那么這個(gè)時(shí)間也會(huì)增大。所以使用Redis時(shí)建議部署在物理機(jī)上,降低fork的影響。


          綁定CPU


          很多時(shí)候,我們?cè)诓渴鸱?wù)時(shí),為了提高性能,降低程序在使用多個(gè)CPU時(shí)上下文切換的性能損耗,一般會(huì)采用進(jìn)程綁定CPU的操作。


          但在使用Redis時(shí),我們不建議這么干,原因如下。


          綁定CPU的Redis,在進(jìn)行數(shù)據(jù)持久化時(shí),fork出的子進(jìn)程,子進(jìn)程會(huì)繼承父進(jìn)程的CPU使用偏好,而此時(shí)子進(jìn)程會(huì)消耗大量的CPU資源進(jìn)行數(shù)據(jù)持久化,子進(jìn)程會(huì)與主進(jìn)程發(fā)生CPU爭(zhēng)搶,這也會(huì)導(dǎo)致主進(jìn)程的CPU資源不足訪問(wèn)延遲增大。


          所以在部署Redis進(jìn)程時(shí),如果需要開(kāi)啟RDB和AOF重寫(xiě)機(jī)制,一定不能進(jìn)行CPU綁定操作!


          開(kāi)啟AOF


          上面提到了,當(dāng)執(zhí)行AOF文件重寫(xiě)時(shí)會(huì)因?yàn)閒ork執(zhí)行耗時(shí)導(dǎo)致Redis延遲增大,除了這個(gè)之外,如果開(kāi)啟AOF機(jī)制,設(shè)置的策略不合理,也會(huì)導(dǎo)致性能問(wèn)題。


          開(kāi)啟AOF后,Redis會(huì)把寫(xiě)入的命令實(shí)時(shí)寫(xiě)入到文件中,但寫(xiě)入文件的過(guò)程是先寫(xiě)入內(nèi)存,等內(nèi)存中的數(shù)據(jù)超過(guò)一定閾值或達(dá)到一定時(shí)間后,內(nèi)存中的內(nèi)容才會(huì)被真正寫(xiě)入到磁盤(pán)中。


          AOF為了保證文件寫(xiě)入磁盤(pán)的安全性,提供了3種刷盤(pán)機(jī)制:



          當(dāng)使用第一種機(jī)制appendfsync always時(shí),Redis每處理一次寫(xiě)命令,都會(huì)把這個(gè)命令寫(xiě)入磁盤(pán),而且這個(gè)操作是在主線程中執(zhí)行的。


          內(nèi)存中的的數(shù)據(jù)寫(xiě)入磁盤(pán),這個(gè)會(huì)加重磁盤(pán)的IO負(fù)擔(dān),操作磁盤(pán)成本要比操作內(nèi)存的代價(jià)大得多。如果寫(xiě)入量很大,那么每次更新都會(huì)寫(xiě)入磁盤(pán),此時(shí)機(jī)器的磁盤(pán)IO就會(huì)非常高,拖慢Redis的性能,因此我們不建議使用這種機(jī)制。


          與第一種機(jī)制對(duì)比,appendfsync everysec會(huì)每隔1秒刷盤(pán),而appendfsync no取決于操作系統(tǒng)的刷盤(pán)時(shí)間,安全性不高。因此我們推薦使用appendfsync everysec這種方式,在最壞的情況下,只會(huì)丟失1秒的數(shù)據(jù),但它能保持較好的訪問(wèn)性能。


          當(dāng)然,對(duì)于有些業(yè)務(wù)場(chǎng)景,對(duì)丟失數(shù)據(jù)并不敏感,也可以不開(kāi)啟AOF。


          使用Swap


          如果你發(fā)現(xiàn)Redis突然變得非常慢,每次訪問(wèn)的耗時(shí)都達(dá)到了幾百毫秒甚至秒級(jí),那此時(shí)就檢查Redis是否使用到了Swap,這種情況下Redis基本上已經(jīng)無(wú)法提供高性能的服務(wù)。


          我們知道,操作系統(tǒng)提供了Swap機(jī)制,目的是為了當(dāng)內(nèi)存不足時(shí),可以把一部分內(nèi)存中的數(shù)據(jù)換到磁盤(pán)上,以達(dá)到對(duì)內(nèi)存使用的緩沖。


          但當(dāng)內(nèi)存中的數(shù)據(jù)被換到磁盤(pán)上后,訪問(wèn)這些數(shù)據(jù)就需要從磁盤(pán)中讀取,這個(gè)速度要比內(nèi)存慢太多!


          尤其是針對(duì)Redis這種高性能的內(nèi)存數(shù)據(jù)庫(kù)來(lái)說(shuō),如果Redis中的內(nèi)存被換到磁盤(pán)上,對(duì)于Redis這種性能極其敏感的數(shù)據(jù)庫(kù),這個(gè)操作時(shí)間是無(wú)法接受的。


          我們需要檢查機(jī)器的內(nèi)存使用情況,確認(rèn)是否確實(shí)是因?yàn)閮?nèi)存不足導(dǎo)致使用到了Swap。


          如果確實(shí)使用到了Swap,要及時(shí)整理內(nèi)存空間,釋放出足夠的內(nèi)存供Redis使用,然后釋放Redis的Swap,讓Redis重新使用內(nèi)存。


          釋放Redis的Swap過(guò)程通常要重啟實(shí)例,為了避免重啟實(shí)例對(duì)業(yè)務(wù)的影響,一般先進(jìn)行主從切換,然后釋放舊主節(jié)點(diǎn)的Swap,重新啟動(dòng)服務(wù),待數(shù)據(jù)同步完成后,再切換回主節(jié)點(diǎn)即可。


          可見(jiàn),當(dāng)Redis使用到Swap后,此時(shí)的Redis的高性能基本被廢掉,所以我們需要提前預(yù)防這種情況。


          我們需要對(duì)Redis機(jī)器的內(nèi)存和Swap使用情況進(jìn)行監(jiān)控,在內(nèi)存不足和使用到Swap時(shí)及時(shí)報(bào)警出來(lái),及時(shí)進(jìn)行相應(yīng)的處理。


          網(wǎng)卡負(fù)載過(guò)高


          如果以上產(chǎn)生性能問(wèn)題的場(chǎng)景,你都規(guī)避掉了,而且Redis也穩(wěn)定運(yùn)行了很長(zhǎng)時(shí)間,但在某個(gè)時(shí)間點(diǎn)之后開(kāi)始,訪問(wèn)Redis開(kāi)始變慢了,而且一直持續(xù)到現(xiàn)在,這種情況是什么原因?qū)е碌模?/span>


          之前我們就遇到這種問(wèn)題,特點(diǎn)就是從某個(gè)時(shí)間點(diǎn)之后就開(kāi)始變慢,并且一直持續(xù)。這時(shí)你需要檢查一下機(jī)器的網(wǎng)卡流量,是否存在網(wǎng)卡流量被跑滿的情況。


          網(wǎng)卡負(fù)載過(guò)高,在網(wǎng)絡(luò)層和TCP層就會(huì)出現(xiàn)數(shù)據(jù)發(fā)送延遲、數(shù)據(jù)丟包等情況。Redis的高性能除了內(nèi)存之外,就在于網(wǎng)絡(luò)IO,請(qǐng)求量突增會(huì)導(dǎo)致網(wǎng)卡負(fù)載變高。



          如果出現(xiàn)這種情況,你需要排查這個(gè)機(jī)器上的哪個(gè)Redis實(shí)例的流量過(guò)大占滿了網(wǎng)絡(luò)帶寬,然后確認(rèn)流量突增是否屬于業(yè)務(wù)正常情況,如果屬于那就需要及時(shí)擴(kuò)容或遷移實(shí)例,避免這個(gè)機(jī)器的其他實(shí)例受到影響。


          運(yùn)維層面,我們需要對(duì)機(jī)器的各項(xiàng)指標(biāo)增加監(jiān)控,包括網(wǎng)絡(luò)流量,在達(dá)到閾值時(shí)提前報(bào)警,及時(shí)與業(yè)務(wù)確認(rèn)并擴(kuò)容。


          總結(jié)


          以上我們總結(jié)了Redis中常見(jiàn)的可能導(dǎo)致延遲增大甚至阻塞的場(chǎng)景,這其中既涉及到了業(yè)務(wù)的使用問(wèn)題,也涉及到Redis的運(yùn)維問(wèn)題。


          可見(jiàn),要想保證Redis高性能的運(yùn)行,其中涉及到CPU、內(nèi)存、網(wǎng)絡(luò),甚至磁盤(pán)的方方面面,其中還包括操作系統(tǒng)的相關(guān)特性的使用。


          作為開(kāi)發(fā)人員,我們需要了解Redis的運(yùn)行機(jī)制,例如各個(gè)命令的執(zhí)行時(shí)間復(fù)雜度、數(shù)據(jù)過(guò)期策略、數(shù)據(jù)淘汰策略等,使用合理的命令,并結(jié)合業(yè)務(wù)場(chǎng)景進(jìn)行優(yōu)化。


          作為DBA運(yùn)維人員,需要了解數(shù)據(jù)持久化、操作系統(tǒng)fork原理、Swap機(jī)制等,并對(duì)Redis的容量進(jìn)行合理規(guī)劃,預(yù)留足夠的機(jī)器資源,對(duì)機(jī)器做好完善的監(jiān)控,才能保證Redis的穩(wěn)定運(yùn)行。

          感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。

              · END ·
          最后,關(guān)注公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全


          正文結(jié)束


          推薦閱讀 ↓↓↓

          1.不認(rèn)命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵(lì)志故事

          2.如何才能成為優(yōu)秀的架構(gòu)師?

          3.從零開(kāi)始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧

          4.程序員一般可以從什么平臺(tái)接私活?

          5.37歲程序員被裁,120天沒(méi)找到工作,無(wú)奈去小公司,結(jié)果懵了...

          6.IntelliJ IDEA 2019.3 首個(gè)最新訪問(wèn)版本發(fā)布,新特性搶先看

          7.這封“領(lǐng)導(dǎo)痛批95后下屬”的郵件,句句扎心!

          8.15張圖看懂瞎忙和高效的區(qū)別!

          瀏覽 65
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码在校大学生开心内射 | 亚洲AAA网 | 三级视频在线播放 | 天天日天天射天天爽 | www.91爱爱 |