文章不易,請(qǐng)關(guān)注公眾號(hào) 毛毛蟲的小小蠟筆,多多支持,謝謝。
有任何問題都可以留言咨詢。
思考1
寫入量很大,導(dǎo)致redis的rdb持久化異常
一開始排查到問題,是訪問Redis返回時(shí)長(zhǎng)較長(zhǎng)。
然后看到應(yīng)用服務(wù)的報(bào)錯(cuò)信息:
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
再查看redis組件的日志:
can't save in background: fork: cannot allocate memory
說明是bgsave出錯(cuò)了,無法申請(qǐng)到內(nèi)存。
思考
1、bgsave vs save
save直接調(diào)用rdbSave函數(shù),阻塞redis主進(jìn)程,直到保存完成為止。在主進(jìn)程阻塞期間,服務(wù)器不能處理客戶端的任何請(qǐng)求。
如果數(shù)據(jù)量小,用此命令可能感覺不出有什么區(qū)別,但是當(dāng)數(shù)據(jù)量很大的時(shí)候,就需要謹(jǐn)慎使用這個(gè)命令。
bgsave命令執(zhí)行之后立即返回OK ,然后redis fork出一個(gè)新子進(jìn)程,原來的redis 進(jìn)程(父進(jìn)程)繼續(xù)處理客戶端請(qǐng)求,而子進(jìn)程則負(fù)責(zé)將數(shù)據(jù)保存到磁盤,然后退出。
2、rdb的缺點(diǎn)
詳情 請(qǐng)查看:毛毛蟲的小小蠟筆