banner
李大仁博客

李大仁博客

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

[Redis] Redisの実行時におけるバックグラウンドでの保存ができない問題の解決

Redis は、ANSI C 言語で書かれたオープンソースの、ネットワークをサポートし、メモリまたは永続化に基づくログ形式の Key-Value データベースであり、さまざまな言語の API を提供しています。Redis の開発は 2010 年 3 月 15 日から VMware によって主催されています。2013 年 5 月からは、Redis の開発は Pivotal によってサポートされています。

Redis の実行中には、頻繁に Cannot save in background の問題が発生します。通常、これは 2 つの理由によるものです。1 つ目は、Redis が使用するメモリが大きすぎて、BGSAVE 時にシステムが十分なメモリを BGSAVE プロセスに割り当てることができないためエラーが発生することです。この場合、Redis の最大メモリサイズをシステムメモリの半分以下に制限することができます。Redis のメモリは redis.conf ファイルで maxmemory プロパティを変更することで設定できます。

maxmemory # システムのインストールされたメモリの半分以下、実験環境では 1/3 を超えないようにすることをお勧めします

もし、マシンのメモリが少ないがディスクの速度が十分に速い(SSD レベル)場合は、Redis の VM 機能を有効にすることができます。それ以外の場合は、VM 機能を直接閉じることをお勧めします。実験環境では VM を直接閉じることができます。

vm-enable no # VM を閉じる

2 つ目の原因は、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 を実行する(超高頻度、実験環境では設定不要)

第 1 のパラメータは時間間隔(秒単位)、第 2 のパラメータは更新回数(回単位)を表します。

最後に、書き込み圧縮属性をオンに設定することで、各 BGSAVE のディスク書き込み時間を効果的に減らすことができます。

rdbcompression yes

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。