検索
ホームページデータベースRedisRedis で一般的なレイテンシの問題を解決する方法

非常に複雑なコマンドの使用

Redis の使用時にアクセス遅延が突然増加した場合、どのようにトラブルシューティングすればよいでしょうか?

まず、Redisの遅いログを確認することが第一ステップです。 Redis のスロー ログ コマンド統計機能を使用すると、次のオプションを設定して、どのコマンドが実行に大きな遅延を引き起こしているかを確認できます。

まず、Redis のスロー ログのしきい値を設定します。しきい値を超えたコマンドのみが記録されます。ここでの単位はマイクロ秒です。たとえば、スロー ログのしきい値を 5 ミリ秒に設定し、最新の 1,000 件のスローのみを設定します保持されるログ レコード。:

# 命令执行超过5毫秒记录慢日志
CONFIG SET slowlog-log-slower-than 5000
# 只保留最近1000条慢日志
CONFIG SET slowlog-max-len 1000

設定が完了すると、遅延が 5 ミリ秒を超える場合、実行されたすべてのコマンドが Redis によって記録されます。SLOWLOG get 5 を実行して、最後の 5 つのスロー ログをクエリします。

127.0.0.1:6379> SLOWLOG get 5
1) 1) (integer) 32693       # 慢日志ID
   2) (integer) 1593763337  # 执行时间
   3) (integer) 5299        # 执行耗时(微妙)
   4) 1) "LRANGE"           # 具体执行的命令和参数
      2) "user_list_2000"
      3) "0"
      4) "-1"
2) 1) (integer) 32692
   2) (integer) 1593763337
   3) (integer) 5044
   4) 1) "GET"
      2) "book_price_1000"
...

遅いログを表示することによって、ログを通じて、どのコマンドをいつ実行するのに時間がかかるかを知ることができます。ビジネスで、sort、sunion、などの O(N) を超える複雑さのコマンドを頻繁に使用する場合、 zunionstore、keys、scan、または O(N) ) コマンドの実行時は比較的大量のデータを操作するため、これらの場合、Redis によるデータの処理に非常に時間がかかります。

Redis インスタンスの CPU 使用率が高いにもかかわらず、サービス リクエストの量が大きくない場合は、複雑なコマンドの使用が原因である可能性があります。

解決策は、これらの複雑なコマンドを使用せず、一度に大量のデータを取得せず、Redis が時間内に処理して返せるように、毎回少量のデータを操作するようにしてください。

Storage bigkey

遅いログをクエリして、複雑なコマンドが原因ではないことが判明した場合 (たとえば、遅いログ レコードに SET 操作や DELETE 操作が表示されるなど)、次のことを行う必要があります。 Redis が bigkey を書き込む状況はありますか?

Redis が新しいデータを書き込むと、そのデータにメモリ領域が割り当てられ、Redis からデータが削除されると、対応するメモリ領域も解放されます。

キーによって書き込まれるデータが非常に大きい場合、Redis のメモリ割り当てにも時間がかかります。同様に、このキーのデータを削除する場合も、メモリの解放に時間がかかります。

ビジネス コードをチェックして、bigkey が書き込まれているかどうかを確認する必要があります。書き込まれたデータの量を評価する必要があります。ビジネス レイヤーは、キーに過剰な量のデータを保存することを避ける必要があります。

bigkey の問題に対応して、Redis はバージョン 4.0 でレイジーフリー メカニズムを正式に開始しました。これは、bigkey のメモリを非同期的に解放し、Redis のパフォーマンスへの影響を軽減するために使用されます。それでも、bigkey の使用はお勧めしません。Bigkey は、クラスターの移行プロセス中の移行のパフォーマンスにも影響します。これについては、後ほどクラスター関連の記事で詳しく紹介します。

有効期限の集中管理

Redis を使用しているときに大きな遅延はないものの、ある時点で突然遅延の波が発生し、レポート時間が遅くなる場合があります。ポイントは、特定の時間や発生頻度など、非常に規則的です。

これが発生した場合は、まとめて期限切れになったキーが多数存在するかどうかを検討する必要があります。

一定の時点で多数のキーの有効期限が切れる場合、この時点で Redis にアクセスすると、遅延が増加する可能性があります。

Redis の有効期限戦略は、定期的な削除と遅延削除の 2 つの戦略を採用しています。

Redis の定期的な削除スケジュールされたタスクも、Redis メインスレッドで実行されることに注意してください。アクティブな有効期限が切れると、大量の期限切れのキーを削除する必要がある場合があり、その場合、ビジネス アクセス中に、有効期限タスクが完了した後でのみビジネス リクエストを処理する必要があります。このとき、業務アクセスの遅延が増大するという問題が発生し、最大遅延は25ミリ秒となります。

そして、このアクセス遅延は低速ログには記録されません。スローログには、特定のコマンドの実際の実行時間のみが記録されます。Redis アクティブ有効期限ポリシーは、運用コマンドの前に実行されます。運用コマンドの時間がスローログのしきい値に達していない場合、スローログの統計には計算されませんが、私たちのビジネスでは遅延が増加しています。

解決策は、一元化された有効期限にランダムな時間を追加し、有効期限が必要なこれらのキーの時間を分散することです。

インスタンスのメモリが上限に達しました

Redis を純粋なキャッシュとして使用する場合、インスタンスのメモリ上限 maxmemory を設定し、LRU 排除戦略を有効にすることがあります。

インスタンスのメモリが maxmemory に達すると、新しいデータの書き込みが毎回遅くなる可能性があることがわかります。

速度が低下する理由は、Redis メモリが maxmemory に達すると、新しいデータが書き込まれる前に、メモリを maxmemory 以下に保つためにデータの一部を追い出す必要があるためです。

古いデータを追い出すロジックにも時間がかかり、具体的な時間の長さは構成された削除戦略によって異なります

フォークには非常に時間がかかります

If Redis では RDB および AOF 書き換えを自動生成する機能が有効になっており、バックグラウンドで RDB および AOF 書き換えを生成する際に Redis のアクセス遅延が増加する場合がありますが、これらの作業が完了すると遅延は解消されます。

この種の状況は、通常、RDB と AOF の書き換えを生成するタスクの実行によって発生します。

RDB と AOF を生成するには、データの永続化のために親プロセスが子プロセスをフォークアウトする必要があります。フォーク実行プロセス中に、親プロセスはメモリ ページ テーブルを子プロセスにコピーする必要があります。インスタンス全体が大量のメモリを占有する場合、メモリの量が足りない場合は、コピーが必要です。メモリ ページ テーブルには時間がかかります。このプロセスは大量の CPU リソースを消費します。フォークが完了する前に、インスタンス全体がブロックされ、リクエストを処理できなくなります。現時点では CPU リソースが不足しているため、フォークにはさらに時間がかかり、第 2 レベルに到達する場合でも時間がかかります。これは Redis のパフォーマンスに重大な影響を与えます。

CPU のバインド

多くの場合、サービスをデプロイするときに、プログラムが複数の CPU を使用するときにパフォーマンスを向上させ、コンテキスト切り替えによるパフォーマンスの損失を軽減するために、通常、CPU へのプロセス バインドを使用します。 . 動作します。

ただし、Redis を使用する場合は、次の理由によりこれを行うことはお勧めしません。

バインドされた CPU Redis では、データの永続化を実行する際、フォークアウトされた子プロセスは親プロセスの CPU 使用率設定を継承し、このとき子プロセスはデータの永続化のために大量の CPU リソースを消費します。子プロセスがメインプロセスと CPU を競合するため、メインプロセスの CPU リソースが不足し、アクセス遅延が増加します。

したがって、Redis プロセスをデプロイするときに、RDB および AOF 書き換えメカニズムを有効にする必要がある場合は、CPU バインド操作を実行してはなりません

Swap を使用します

次のような場合は、 Redis が突然変化する 非常に遅く、アクセスごとに数百ミリ秒、場合によっては数秒かかる場合もありますので、Redis が Swap を使用しているかどうかを確認してください。この場合、Redis は基本的に高パフォーマンスのサービスを提供できません。

オペレーティング システムにはスワップ メカニズムが用意されていることがわかりました。その目的は、メモリが不足した場合にメモリ内のデータの一部をディスクにスワップして、メモリ使用量をバッファすることです。

しかし、メモリ内のデータがディスクにスワップされた後、データにアクセスするにはディスクから読み取る必要があり、メモリよりもはるかに時間がかかります。

特に Redis のような高パフォーマンスのインメモリ データベースの場合、Redis のメモリがディスクにスワップされる場合、この操作時間は Redis のようなパフォーマンスに非常に敏感なデータベースでは許容できないものになります。オペレーティング システムを一時的にシャットダウンできます。 Swap

ネットワーク カードの負荷が高すぎます

ある時点から速度が低下し始め、継続するのが特徴です。この時点で、マシンのネットワーク カードのトラフィックが枯渇しているかどうかを確認する必要があります。

ネットワーク負荷が高いと、ネットワーク層や TCP レベルでのデータ送信の遅延やデータ損失などの問題が発生する可能性があります。 Redis はメモリに加えて、優れたネットワーク IO パフォーマンスにより高性能です。ただし、リクエストの数が増加し続けると、それに応じてネットワーク カードの負荷も増加します。

これが発生した場合は、このマシン上のどの Redis インスタンスに過剰なトラフィックがあり、ネットワーク帯域幅をいっぱいにしているかを確認し、トラフィックの突然の増加が通常のビジネス状況であるかどうかを確認する必要があります。時間内に容量を拡張する必要があります。または、このマシンの他のインスタンスが影響を受けないようにインスタンスを移行してください。

以上がRedis で一般的なレイテンシの問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Redis:その目的と主要なアプリケーションを発表しますRedis:その目的と主要なアプリケーションを発表しますMay 03, 2025 am 12:11 AM

Redisisanopen-Source、In-MemoryDatastructurestoreStoreSadatabase、Cache、AndmessageBroker、ExcellingInspeedandversatility.ItisisWidely-susederCaching、Real-Timeanalytics、Session Management、AndleaderboardsdueTotutsuptorututrututrututruturturturturturturesturesaddataacys

Redis:キー価値データストアのガイドRedis:キー価値データストアのガイドMay 02, 2025 am 12:10 AM

Redisは、データベース、キャッシュ、メッセージブローカーとして使用されるオープンソースメモリデータ構造ストレージであり、高速応答と高い並行性が必要なシナリオに適しています。 1.Redisはメモリを使用してデータを保存し、マイクロ秒の読み取り速度と書き込み速度を提供します。 2.文字列、リスト、コレクションなどのさまざまなデータ構造をサポートします。3。Redisは、RDBおよびAOFメカニズムを介してデータの持続性を実現します。 4.シングルスレッドモデルと多重化テクノロジーを使用して、リクエストを効率的に処理します。 5.パフォーマンス最適化戦略には、LRUアルゴリズムとクラスターモードが含まれます。

Redis:キャッシュ、セッション管理などRedis:キャッシュ、セッション管理などMay 01, 2025 am 12:03 AM

Redisの関数には、主にキャッシュ、セッション管理、その他の機能が含まれます。1)キャッシュ関数はメモリを介してデータを保存して読み取り速度を向上させ、eコマースWebサイトなどの高周波アクセスシナリオに適しています。 2)セッション管理関数は、分散システムでセッションデータを共有し、有効期限のあるメカニズムを通じて自動的にクレンジングします。 3)リアルタイムメッセージプッシュおよびマルチスレッドシステムおよびその他のシナリオに適した、パブリッシュサブスクライブモード、分散ロック、カウンターなどのその他の機能。

Redis:そのコア機能と利点の調査Redis:そのコア機能と利点の調査Apr 30, 2025 am 12:22 AM

Redisのコア関数には、メモリストレージと持続性メカニズムが含まれます。 1)メモリストレージは、高性能アプリケーションに適した非常に高速な読み取り速度と書き込み速度を提供します。 2)永続性は、RDBとAOFによってデータが失われないことを保証し、選択はアプリケーションのニーズに基づいています。

Redisのサーバー側操作:提供するものRedisのサーバー側操作:提供するものApr 29, 2025 am 12:21 AM

redis'sserver-sideoperations offferidions and forexuctingcomplexoperationsontheserver.1)機能を調整することで、javascript、orredis'sscriptinglanguage、infulancingscalabilityandmantenmention

Redis:データベースまたはサーバー?役割を分かりやすいRedis:データベースまたはサーバー?役割を分かりやすいApr 28, 2025 am 12:06 AM

redisisbothadatabaseandaserver.1)asadatabase、itusesin memorystorage forfastaccess、理想的なforreal-timeapplicationsandcaching.2)asaserver、itupportspub/submessagingandaging andluascriptingforreal-communicationandserver-sideoperation。

Redis:NOSQLアプローチの利点Redis:NOSQLアプローチの利点Apr 27, 2025 am 12:09 AM

Redisは、高性能と柔軟性を提供するNOSQLデータベースです。 1)大規模データと高い並行性の処理に適したキー価値ペアを介してデータを保存します。 2)メモリストレージとシングルスレッドモデルは、速い読み取りと書き込みと原子性を確保します。 3)RDBおよびAOFメカニズムを使用してデータを持続し、高可用性とスケールアウトをサポートします。

Redis:そのアーキテクチャと目的を理解するRedis:そのアーキテクチャと目的を理解するApr 26, 2025 am 12:11 AM

Redisは、主にデータベース、キャッシュ、メッセージブローカーとして使用されるメモリデータ構造ストレージシステムです。そのコア機能には、シングルスレッドモデル、I/O多重化、持続メカニズム、複製、クラスタリング機能が含まれます。 Redisは、キャッシュ、セッションストレージ、メッセージキューのための実際のアプリケーションで一般的に使用されます。適切なデータ構造を選択し、パイプラインとトランザクションを使用し、監視とチューニングを使用することにより、パフォーマンスを大幅に改善できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター