Chanler

Chanler

「黒馬 Redis 原理」四、メモリ回収

メモリ回収#

Redis の性能が高い主な理由は、メモリストレージに基づいていることですが、単一ノードの Redis ではメモリサイズが大きすぎると、永続化や主従同期の性能に影響を与えます。

設定ファイルで Redis の最大メモリを設定できます maxmemory <bytes> 例えば maxmemory 1gb、メモリが上限に達するとデータを保存できなくなります。

これがメモリ回収戦略を導入する理由です。

有効期限戦略#

expire <key> <expireTime> でキーに生存時間 TTL を設定できます。有効期限が切れた後にアクセスすると、得られるのは nil です。

image.png|500

image.png|500

Redis はどのようにしてキーが期限切れかどうかを知るのでしょうか?
2 つの Dict を利用して、それぞれ key-value および key-ttl を記録します。

TTL が切れたらすぐに削除されるのでしょうか?
例えば:
遅延削除
周期削除

遅延削除#

TTL が切れた時にすぐに削除するのではなく、KEY にアクセスした際にその KEY の生存時間をチェックし、期限切れであれば削除します。

image.png|500

周期削除#

周期削除:明らかに、定期的なタスクを通じて、周期的に一部の期限切れのキーをサンプリングし、削除を実行します。実行周期には 2 つの方法があります:

  • Redis の初期化時に定期的なタスク serverCron () が設定され、server.hz の頻度で期限切れのキーのクリーンアップを実行します。モードは SLOW です。
  • Redis の各イベントループの前に beforeSleep () 関数が呼び出され、期限切れのキーのクリーンアップを実行します。モードは FAST です。

image.png|500

image.png|500

淘汰戦略#

メモリ淘汰:Redis のメモリ使用量が設定された閾値に達したときに、積極的に一部のキーを選択して削除し、より多くのメモリを解放するプロセスです。

コマンドを処理する際に、メモリが不足している場合、maxmemory が設定されていて、Lua スクリプトが実行されていない場合は、まずメモリ淘汰を試みます。

image.png|500

淘汰戦略

image.png|500

LRU と LFU をどのように知るのでしょうか?

image.png|500

淘汰戦略フローチャート

TTL に関しては、生存時間が長いほど削除されるべきです;LRU に関しては、アクセスが遠いほど削除されるべきです;LFU に関しては、アクセスが少ないほど削除されるべきです。

image.png|500

この記事は Mix Space によって xLog に同期更新されました。元のリンクは https://blog.0xling.cyou/posts/redis/redis-6

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