Redis メモリがいっぱいです 解決策:
1、メモリを増やします。
2、メモリ排除戦略を使用します。
3、Redis クラスター。
2 と 3 に注目:
2 番目の点:
redis 構成ファイルの maxmemory パラメーターで、使用可能な最大メモリ サイズ (バイト) を制御できることがわかっています。
それでは、必要なメモリが maxmemory を超えた場合はどうすればよいでしょうか?
このとき、構成ファイル内の maxmemory-policy が機能します。
デフォルト値は noeviction です。
以下に、使用可能なメモリが不十分な場合に Redis キーを削除するための除外ルールを示します。
ルールの説明:
1. volatile-lru
LRU アルゴリズムを使用してキーを削除します (生存時間が設定されているキーのみ)
2. allkeys-lru
LRU アルゴリズムを使用してキーを削除します
3、volatile-random
キーをランダムに削除します (生存時間が設定されているキーのみ)
4. allkeys-random
キーをランダムに削除します
#5.volatile-ttl##最新の生存時間を持つキーを削除します
6.noeviction
キーは削除しないでください。エラーのみを返します。
LRU アルゴリズム、最も最近使用されていないアルゴリズム、最も最近使用されていないアルゴリズム。つまり、最も最近使用されていないキーがデフォルトで削除されます。
しかし、注意しなければならないことが 1 つあります。 Redis は、すべてのキーのうち最も最近使用されていないキーを正確に削除するのではなく、ランダムに 3 つのキーを選択し、これら 3 つのキーのうち最も最近使用されていないキーを削除します。
次に、数値 3 も設定でき、対応する場所は構成ファイルの maxmeory-samples です。
3. クラスターの実行方法
Redis はのみサポートしていますシングルインスタンス、メモリ 通常最大10~20GB。 100 ~ 200 GB のメモリを備えたシステムの場合、クラスタリングを通じてサポートする必要があります。
Redis クラスタリングには、クライアント シャーディング、プロキシ シャーディング、RedisCluster の 3 つの方法があります (これについては後の記事で詳しく説明します。)
1. クライアント シャーディング
ルーティングの実装ビジネスコード経由
メリット: シャーディングアルゴリズムを自分で制御でき、プロキシよりもパフォーマンスが優れています
デメリット: 維持コストが高く、拡張/縮小などの運用保守作業が必要研究と開発
2. エージェント シャーディング
エージェント プログラムはビジネス プログラムからデータ リクエストを受け取り、ルーティング ルールに従ってこれらのリクエストを正しい Redis インスタンスに分散します。そしてそれらをビジネスプログラムに戻します。 Twemproxy や Codis などのミドルウェアを使用して実装されます。
メリット: 運用保守が容易、Redis インスタンスへの接続方法を気にする必要がない
デメリット: パフォーマンスを消費する(約20%)、スムーズに拡張できない/縮小し、データを移行するためにスクリプトを実行する必要があるため、不便です (Codis は自動リバランスを実現するために Twemproxy に基づいてプリシャーディングを最適化および実装します)。
3. Redis クラスター
利点: 公式クラスター ソリューション、セントラル ノードなし、クライアントへの直接接続、優れたパフォーマンス
欠点: ソリューションが重すぎるため、実行できませんスムーズな拡張/縮小には、対応するスクリプトの実行が必要ですが、これは不便で、新しすぎ、対応する成熟したソリューション ケースがありません
Redis 関連の知識の詳細については、
Redis 使用法チュートリアル以上がRedis メモリがいっぱいになった場合の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。