banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

[Redis] 解決Redis運行時Cannot save in background問題

Redis 是一個開源的使用 ANSI C 語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value 資料庫,並提供多種語言的 API。從 2010 年 3 月 15 日起,Redis 的開發工作由 VMware 主持。從 2013 年 5 月開始,Redis 的開發由 Pivotal 贊助。

Redis 運行時經常出現 Cannot save in background 問題,通常因為兩個原因 1.Redis 的佔用的記憶體過大,導致 BGSAVE 時系統無法分配足夠的記憶體給 BGSAVE 進程而導致錯誤。 碰到這種情況時,你可以這樣操作,限制 Redis 的最大記憶體大小到系統記憶體的一半以內。 設置 redis 的記憶體可以在 redis.conf 中修改 maxmemory 屬性

maxmemory # 系統實際安裝記憶體的一半以內,實驗環境的話建議不要超過 1/3

如果你機器的記憶體小但是硬碟速度夠快(SSD 級別)的話可以開啟 Redis 的 VM 功能, 否則建議直接關閉 VM 功能,實驗環境可以直接關閉 VM

vm-enable no #關閉 VM

2. 兩次觸發 BGSAVE 的時間間隔過短,導致 BGSAVE 操作隊列阻塞而出現錯誤。 碰到這種情況時,一般根據你的程式情況調整一下 Redis 的 BGSAVE 的觸發策略就可以了, 在 redis.conf 中找到幾條 save 開頭的配置,根據要求進行相應的配置即可。 具體根據你的實際生產環境配置相應的策略。原則上以保證減少 BGSAVE 次數為目標

save 1000 1 #1000 秒內只要有 1 次更新就進行 save (低頻)
save 250 10 #250 秒內只要有 10 次更新就進行 save(中頻)
save 120 1000 #120 秒內只要有 1000 次更新就進行 save(高頻)
save 40 10000 #40 秒內只要有 10000 次更新就進行 save(超高頻,實驗環境不需要配置)

第一個參數表示時間段,以秒為單位 第二個參數表示更新次數,以次為單位

最後,寫入壓縮屬性可以設置到的打開狀態,可以有效減少每次 BGSAVE 的硬碟寫入時間

rdbcompression yes

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。