成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

redis使用中存在的問(wèn)題及如何避免(一)

jackzou / 671人閱讀

摘要:給我們帶來(lái)便利的同時(shí),使用過(guò)程中會(huì)存在什么問(wèn)題呢,本文將簡(jiǎn)單加以總結(jié)。避免使用內(nèi)存過(guò)大的實(shí)例。如果主線程距離上一次的成功超過(guò),為了數(shù)據(jù)安全會(huì)阻塞直到后臺(tái)線程執(zhí)行完完成。

redis可以滿足很多的應(yīng)用場(chǎng)景,而且因?yàn)閷⑺袛?shù)據(jù)都放到內(nèi)存中,所以它的讀寫(xiě)性能很好,很多公司都在使用redis。redis給我們帶來(lái)便利的同時(shí),使用過(guò)程中會(huì)存在什么問(wèn)題呢,本文將簡(jiǎn)單加以總結(jié)。

阻塞問(wèn)題
redis使用了單線程來(lái)處理請(qǐng)求,為什么單線程可以支持如此高的并發(fā)呢?主要有如下幾點(diǎn):

純內(nèi)存訪問(wèn):將所有數(shù)據(jù)都放到內(nèi)存中,內(nèi)存響應(yīng)時(shí)間為100納秒,是redis達(dá)到每秒萬(wàn)級(jí)別訪問(wèn)的重要基礎(chǔ)

非阻塞IO:redis使用epoll作為I/O多路復(fù)用技術(shù),redis自身的事件處理模型將epoll中的連接、讀寫(xiě)、關(guān)閉都轉(zhuǎn)換為事件,不在網(wǎng)絡(luò)I/O上浪費(fèi)過(guò)多時(shí)間

單線程:避免了線程切換和競(jìng)態(tài)產(chǎn)生的消耗,簡(jiǎn)化了數(shù)據(jù)結(jié)構(gòu)和算法的實(shí)現(xiàn)
因此如果某個(gè)命令執(zhí)行時(shí)間過(guò)長(zhǎng),會(huì)造成其他命令阻塞,對(duì)redis來(lái)說(shuō)是致命的

產(chǎn)生阻塞的場(chǎng)景:
A. API或數(shù)據(jù)結(jié)構(gòu)使用不合理
   a. 避免使用某些易造成阻塞的命令如:keys sort hgetall smembers
      執(zhí)行showlog get [n] 可以獲取最近n條執(zhí)行慢的記錄,對(duì)于執(zhí)行超過(guò)一定時(shí)間
      (默認(rèn)10ms,線上建議設(shè)置為1ms)的命令都會(huì)記錄到一個(gè)定長(zhǎng)隊(duì)列(默認(rèn)128,可調(diào)整)中。              
   b. 防止一次操作獲取過(guò)多數(shù)據(jù):縮減大對(duì)象或者把大對(duì)象拆分為多個(gè)小對(duì)象
      發(fā)現(xiàn)大對(duì)象的命令:redis-cli -h{ip} -p{port} bigkeys
      內(nèi)部原理:采用分段進(jìn)行scan操作,把歷史掃描過(guò)的大對(duì)象統(tǒng)計(jì)出來(lái)
   c. 防止大量key同時(shí)過(guò)期:如果有很多key在同一秒內(nèi)過(guò)期,超過(guò)了所有key的25%,redis主線程就會(huì)阻塞直到過(guò)期key比例下降到25%以內(nèi),
      因此要避免同一時(shí)間過(guò)期大量key,過(guò)期時(shí)間可做散列處理。
      redis4.0引入的lazyfree機(jī)制可以避免del、flushdb、flushall、rename等命令引起的redis-server阻塞,提高服務(wù)穩(wěn)定性。
     
B. CPU飽和
   單線程的redis處理命令時(shí)只能使用一個(gè)CPU,CPU飽和是指redis把單核的CPU使用率跑到接近100%。
   首先要確定redis的并發(fā)量是否達(dá)到極限,通過(guò)redis-cli-h{ip} -p{port}--stat 獲取redis當(dāng)前使用情況。
   如果達(dá)到每秒6w+左右的qps,說(shuō)明單臺(tái)已跑到極限,需要水平擴(kuò)展。
   如果qps只有幾百或者幾千CPU就已經(jīng)飽和,可能使用了高算法復(fù)雜度的命令或者是對(duì)內(nèi)存的過(guò)度優(yōu)化
   (如放寬了ziplist的使用條件,雖然使用的內(nèi)存會(huì)變少,但是更耗CPU)。
      
C. 持久化操作
   持久化引起主線程的阻塞操作主要有:fork阻塞、AOF刷盤(pán)阻塞、HugePage寫(xiě)操作阻塞
   a. fork阻塞
      發(fā)生在RDB和AOF重寫(xiě)時(shí),redis主線程調(diào)用fork操作產(chǎn)生共享內(nèi)存的子線程,由子線程完成持久化文件的重寫(xiě)工作,若fork操作耗時(shí)過(guò)長(zhǎng)會(huì)引起阻塞。
      避免使用內(nèi)存過(guò)大的實(shí)例。              
   b. AOF刷盤(pán)阻塞
      開(kāi)啟AOF持久化功能時(shí),一般會(huì)采用1次/s的刷盤(pán)方式,后臺(tái)線程每秒對(duì)AOF文件做fsync操作,當(dāng)硬盤(pán)壓力過(guò)大時(shí)fsync操作需要等待直到寫(xiě)入完成。
      如果主線程距離上一次的fsync成功超過(guò)2s,為了數(shù)據(jù)安全會(huì)阻塞直到后臺(tái)線程執(zhí)行完fsync完成。這種阻塞是由于磁盤(pán)壓力引起。
      盡量獨(dú)立部署
   c. HugePage寫(xiě)操作阻塞
      子進(jìn)程在執(zhí)行重寫(xiě)期間利用linux的copyonwrite機(jī)制,會(huì)拖慢寫(xiě)操作的執(zhí)行時(shí)間,導(dǎo)致大量寫(xiě)操作慢查詢。
      優(yōu)化linux配置
      

緩存穿透
緩存穿透是指查詢一個(gè)根本不存在的數(shù)據(jù),緩存層和存儲(chǔ)層都不命中,且不將空結(jié)果寫(xiě)到緩存中。
會(huì)導(dǎo)致后端存儲(chǔ)負(fù)載變大,造成后端存儲(chǔ)宕機(jī)等問(wèn)題??梢栽诔绦蛑蟹謩e統(tǒng)計(jì)總調(diào)用數(shù)、緩存命中數(shù)、存儲(chǔ)命中數(shù),若有大量存儲(chǔ)層空命中,可能是出現(xiàn)了緩存穿透。
產(chǎn)生原因:1.自身代碼或數(shù)據(jù)出現(xiàn)問(wèn)題 2.惡意攻擊,爬蟲(chóng)造成空命中
如何解決:

緩存空對(duì)象
存儲(chǔ)層不命中,扔將空對(duì)象保存到緩存層。
適用場(chǎng)景:數(shù)據(jù)頻繁變化、實(shí)時(shí)性高
帶來(lái)問(wèn)題:
a.緩存了空值,會(huì)占用內(nèi)存空間;可以設(shè)置較短過(guò)期時(shí)間,自動(dòng)剔除。
b.數(shù)據(jù)不一致,若存儲(chǔ)層添加了此數(shù)據(jù),有短暫不一致;可主動(dòng)清除掉緩存的空對(duì)象。

布隆過(guò)濾器
在訪問(wèn)緩存層和數(shù)據(jù)層之前將存在的key用布隆過(guò)濾器提前保存起來(lái),做第一層攔截。
適用場(chǎng)景:大用戶集,實(shí)時(shí)性要求較低的場(chǎng)景,如有幾億的數(shù)據(jù)集,每隔一段時(shí)間會(huì)新增用戶進(jìn)去,在更新之前新用戶的訪問(wèn)會(huì)存在緩存穿透問(wèn)題。
缺點(diǎn):代碼維護(hù)復(fù)雜

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/61950.html

相關(guān)文章

  • redis使用存在問(wèn)題如何避免(二)

    摘要:使用中存在的問(wèn)題及如何避免一闡述了的阻塞問(wèn)題及緩存穿透問(wèn)題,本文將繼續(xù)總結(jié)在使用中的問(wèn)題及方案。更多的節(jié)點(diǎn)不代表更高的性能,這就是無(wú)底洞問(wèn)題??墒褂寐┩傲钆仆暗确绞竭M(jìn)行限流操作,將流量擋在應(yīng)用上層。 redis使用中存在的問(wèn)題及如何避免(一)闡述了redis的阻塞問(wèn)題及緩存穿透問(wèn)題,本文將繼續(xù)總結(jié)redis在使用中的問(wèn)題及方案。 無(wú)底洞問(wèn)題 隨著數(shù)據(jù)量和訪問(wèn)量的增長(zhǎng),需要增加更多...

    wfc_666 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

jackzou

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<