Redis のホット キーの問題に対処するにはどうすればよいですか?次の記事では、Redis キャッシュ ホット キーの問題に対する一般的な解決策を紹介します。
C サイドのビジネスを行う場合、データベースへの負担を軽減し、ビジネスの応答時間を短縮するために、一次キャッシュを導入することは避けられません。問題を解決するためにミドルウェアが導入されるたびに、同時に、前の記事「データベースとキャッシュの一貫性の実際」で述べたキャッシュの一貫性を実現する方法など、注意を必要とする多くの新たな問題も必然的に生じます。実際、Redis を 1 次キャッシュとして使用するときに、ホット キーや大きなキーなど、他にも問題が発生する可能性があります。この記事では、ホット キー(ホット キー)について説明します。 )
問題と、ホット キー
問題を合理的に解決する方法。
背景
ホットキー
問題は何ですか?またその原因は何ですか?
一般的に、私たちが使用するキャッシュ Redis はマルチノード クラスター バージョンであり、特定のキーを読み書きする場合、対応するスロットはキーのハッシュに基づいて計算され、それに基づいて見つけることができます。対応するシャード (1 つのマスターと複数のスレーブで構成される Redis クラスターのセット) は、K-V にアクセスするために使用されます。しかし、実際の申請プロセスでは、特定の事業や特定の期間(電子商取引事業における商品の速報販売活動など)において、同じキーへのアクセス要求が大量に発生することがあります。すべてのリクエスト (およびそのようなリクエストの読み取り/書き込み比率が非常に高い) は同じ Redis サーバーに分類されるため、Redis の負荷が大幅に増加します。この時点で、システム全体に新しい Redis インスタンスを追加すると、ハッシュ アルゴリズムによれば、同じキーに対するリクエストは引き続き同じ新しいマシンに送信されるため、役に立ちません。これが依然としてシステムのボトルネックとなり 2、さらにはクラスター全体のクラッシュを引き起こす可能性があります。このホットスポット キーの値が相対的な場合は、この問題は「ホット キー」問題として知られています。 [関連する推奨事項: Redis ビデオ チュートリアル ]
以下の図 1 と図 2 に示すように、これらはそれぞれ通常の Redis クラスター クラスターとプロキシ プロキシのレイヤーを使用した Redis クラスター キー アクセスです。
上で述べたように、ホット キーはクラスター内の少数のノードに非常に高い負荷圧力をもたらします。場合、これらのノードがダウンする可能性があり、キャッシュ クラスター全体の動作に影響を与えるため、ホット キーを発見し、ホット キーの問題を時間内に解決する必要があります。
1. ホット キーの検出
ホット キーの検出は、Redis クラスターとホット キーの分散によって引き起こされる重大な影響を考慮して、大まかで細かい思考プロセスを通じて実行できます。ホットスポットキー検出用。
1.1 クラスター内の各スロットの QPS 監視
ホット キーの最も明白な影響は、Redis クラスター全体の QPS が維持されているという前提でのトラフィック分散です。クラスタ内のスロットが不均一であるという問題に関しては、最初に考えられるのは、各スロットのトラフィックを監視することです。レポート後、各スロットのトラフィックを比較すると、特定のスロットを見つけることができます。ホットキーが表示されたときに影響を受けます。この監視は最も便利ですが、粒度が粗すぎるため、初期のクラスター監視ソリューションにのみ適しており、ホット キーが正確に検出されるシナリオには適していません。
1.2 プロキシのプロキシ メカニズムは、トラフィック入口統計全体として使用されます
図 2 で Redis クラスター プロキシ モードを使用している場合、すべてのリクエストが送信されるため、最初にプロキシへ 特定のスロット ノードに移動すると、このホット キーの検出統計がプロキシで実行されます。プロキシでは、タイム スライディング ウィンドウ
に基づいて各キーがカウントされ、その後対応するしきい値を超えた数がカウントされます。冗長な統計が多すぎるのを防ぐために、プレフィックスとタイプに対応するキーのみをカウントするようにいくつかのルールを設定することもできます。この方法には少なくともプロキシ メカニズムが必要であり、Redis アーキテクチャの要件もあります。
1.3 redis LFU ベースのホットスポット キー検出メカニズム
redis 4.0 以降のバージョンは、各ノードで LFU ベースのホットスポット キー検出メカニズムをサポートしています。 を使用します。 redis-cli –hotkeys
redis-cli の実行時に –hotkeys オプションを追加するだけです。このコマンドをノード上で定期的に使用して、対応するホットスポット キーを検出できます。
以下に示すように、redis-cli –hotkeys
の実行結果とホットキーの統計が確認できます。は、統計を収集するためにスケジュールされた実行を設定できます。
1.4 Redis クライアントによる検出
クライアントからは毎回 redis コマンドが発行されるので、これを元に Redis クライアントの一部のコードで統計や集計を行うことができます。各クライアントはタイム スライディング ウィンドウに基づいて統計を作成し、特定のしきい値を超えると統計がサーバーに報告され、サーバーは統計を各クライアントに一律に送信し、対応する有効期限を設定します。
この方法はより 美しい
ように見えますが、実際には、クライアント側での変換が実行中のプロセスに大きな影響を与えるため、一部のアプリケーション シナリオにはあまり適していません。メモリ オーバーヘッド、より直接的に言えば、Java や goLang などの自動メモリ管理言語では、オブジェクトがより頻繁に作成されるため、gc がトリガーされ、インターフェイスの応答時間が増加します。これは簡単に予測できません。
最終的には、各企業のインフラストラクチャを通じて対応する選択を行うことができます。
2. ホット キーの解決策
上記の方法により、対応するホット キーまたはホット スロットが検出されたため、対応するホット キーの問題を解決する必要があります。ホット キーを解決するにはいくつかのアイデアがありますので、1 つずつ見てみましょう。
2.1 特定のキーまたはスロットの電流を制限する
最も単純かつ大雑把な方法は、特定のスロットまたはホット キーの電流を制限することです。これはビジネス上の損失であるため、オンラインで問題が発生し、損失を停止する必要がある場合にのみ、特定の電流制限を使用することをお勧めします。
2.2 第 2 レベル (ローカル) キャッシュを使用する
ローカル キャッシュは、最も一般的に使用されるソリューションでもあります。第 1 レベルのキャッシュはそのような大きな負荷に耐えることができないためです。 , 2次キャッシュを追加するだけです。各リクエストはサービスによって発行されるため、この 2 次キャッシュをサービス側に追加するのが最適です。そのため、サーバーは対応するホット キーを取得するたびに、ローカル キャッシュを使用してコピーを保存し、ローカル キャッシュが保存されるまでコピーを保存できます。その後、redis クラスターへの負荷を軽減するよう再度リクエストします。 Java を例に挙げると、guavaCache は既製のツールです。次の例:
//本地缓存初始化以及构造 private static LoadingCache<String, List<Object>> configCache = CacheBuilder.newBuilder() .concurrencyLevel(8) //并发读写的级别,建议设置cpu核数 .expireAfterWrite(10, TimeUnit.SECONDS) //写入数据后多久过期 .initialCapacity(10) //初始化cache的容器大小 .maximumSize(10)//cache的容器最大 .recordStats() // build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存 .build(new CacheLoader<String, List<Object>>() { @Override public List<Object> load(String hotKey) throws Exception { } }); //本地缓存获取 Object result = configCache.get(key);
ローカル キャッシュが私たちに与える最大の影響は、データの不整合の問題です。キャッシュの有効期限をどのくらい長く設定するかによって、最も長いオンライン データの不整合の問題が発生します。このキャッシュ時間は、次のようにする必要があります。独自のクラスター圧力と、ビジネスで許容される最大不整合時間を測定します。
2.3 キーの削除
データの一貫性を可能な限り確保しながら、ホット キーの問題が発生しないようにするにはどうすればよいでしょうか?キーを削除することも良い解決策です。
キャッシュに入れるとき、対応するビジネスのキャッシュ キーを複数の異なるキーに分割します。以下の図に示すように、まず更新キャッシュ側でキーを N 個の部分に分割します。たとえば、キーの名前が「good_100」の場合、「good_100_copy1」、「good_100_copy2」の 4 つの部分に分割できます。 「、「good_100_copy3」、「good_100_copy4」、これらの N キーは、更新または追加されるたびに変更する必要があります。この手順は、キーを削除することです。
サービス側では、アクセスするトラフィックを十分に均一にする方法と、アクセスしようとしているホットキーにサフィックスを追加する方法を見つける必要があります。マシンの IP アドレスまたは MAC アドレスに基づいてハッシュを実行し、値の残りと分割キーの数を取得し、最終的にどの種類のキー サフィックスに結合するかを決定する方法はいくつかあります。どのマシンにヒットするかについては、サービス開始時に 1 つ、乱数は分割キーの数の残りです。
2.4 ローカル キャッシュ構成センターの別のアイデア
マイクロサービス構成センターに詳しい人のために、アイデアは、構成センターの一貫性に合わせて変更できます。 nacos を例に挙げると、分散構成の一貫性をどのように実現し、迅速に対応できるのでしょうか?次に、キャッシュを構成に例えて、次のように実行します。
ロングポーリング
ローカリゼーション
構成。まず、サービスの開始時にすべての構成が初期化され、その後、現在のサービス監視構成が変更されたかどうかを確認するために定期的にロング ポーリングが開始されます。変更がある場合は、ロング ポーリング リクエストがすぐに返され、ローカル構成が更新されます。変更がない場合は、すべてのビジネス コードでローカル メモリ キャッシュ構成が使用されます。これにより、分散キャッシュ構成の適時性と一貫性が保証されます。
2.5 事前に作成できるその他の計画
上記の各ソリューションは、ホット キーの問題を解決するために比較的独立しているため、実際にビジネス上の要求に直面した場合、実際には全体的なスキーム設計を検討するには長い時間がかかります。一部の極端なフラッシュ セールス シナリオによって引き起こされるホットキーの問題については、十分な予算があれば、サービス ビジネスと Redis キャッシュ クラスターを直接分離して、通常のビジネスへの影響を回避することができます。同時に、一時的により優れた災害復旧と、電流制限措置。
いくつかの統合ソリューション
現在、市場にはホットキー用の比較的完全なアプリケーション レベルのソリューションが多数あり、その中には、JD.com がこの点に関するオープン ソースのホットキー ツールを用意しています。原理は、クライアント側で洞察を作成し、対応するホットキーを報告することです。サーバーがそれを検出すると、対応するホットキーを対応するサーバーに送信してローカル キャッシュを行い、このローカル キャッシュはリモートの対応付け後に同期的に更新されます。キーは更新されています。すでにこれは、現在比較的成熟した 自動ホット キー検出および分散整合性キャッシュ
ソリューション、京東小売ホット キー です。
概要
上記は、作成者が大まかに理解している、または実践したホット キーの対処方法に関するいくつかの解決策です。ホット キーの発見から ホット キーの 2 つの重要な問題を解決します。各ソリューションには、ビジネスの不一致や導入の難しさなど、長所と短所があります。自社のビジネスの現在の特性や会社の現在のインフラストラクチャに基づいて、対応する調整や変更を行うことができます。
プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !
以上がRedis のキャッシュ ホット キーの問題に対処する方法について話しましょう?よく使用されるソリューションの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

RedisデータベースとSQLデータベースの主な違いは、Redisが高性能および柔軟性要件に適したインメモリデータベースであることです。 SQLデータベースは、複雑なクエリとデータの一貫性要件に適したリレーショナルデータベースです。具体的には、1)Redisは高速データアクセスとキャッシュサービスを提供し、キャッシュおよびリアルタイムのデータ処理に適した複数のデータ型をサポートします。 2)SQLデータベースは、テーブル構造を介してデータを管理し、複雑なクエリとトランザクション処理をサポートし、データの一貫性を必要とするeコマースや金融システムなどのシナリオに適しています。

redisactsassassadatastoreandaservice.1)asadatastore、itusesin memorystorage for fastorations、supporting variousdatastructureSlike-key-valuepairsandsortedsets.2)asaservice、iteasruascruascriptingrupting criptingforceptingpurplecomplecomplecprexoperations

他のデータベースと比較して、Redisには次の独自の利点があります。1)非常に速い速度、および読み取り操作は通常、マイクロ秒レベルにあります。 2)豊富なデータ構造と操作をサポートします。 3)キャッシュ、カウンター、公開サブスクリプションなどの柔軟な使用シナリオ。 Redisまたはその他のデータベースを選択する場合、特定のニーズとシナリオに依存します。 Redisは、高性能および低遅延のアプリケーションでうまく機能します。

Redisは、データストレージと管理において重要な役割を果たしており、複数のデータ構造と持続性メカニズムを通じて最新のアプリケーションの中核となっています。 1)Redisは、文字列、リスト、コレクション、注文されたコレクション、ハッシュテーブルなどのデータ構造をサポートし、キャッシュや複雑なビジネスロジックに適しています。 2)RDBとAOFの2つの持続方法を通じて、Redisは信頼できるストレージとデータの迅速な回復を保証します。

Redisは、大規模なデータの効率的なストレージとアクセスに適したNOSQLデータベースです。 1.Redisは、複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。 2.キャッシュ、セッション管理などに適した、非常に速い読み取り速度と書き込み速度を提供します。 4.使用例には、基本的なキー値ペア操作と高度なコレクション重複排除関数が含まれます。 5.一般的なエラーには、接続の問題、データ型の不一致、メモリオーバーフローが含まれるため、デバッグに注意する必要があります。 6.パフォーマンス最適化の提案には、適切なデータ構造の選択とメモリ排除戦略の設定が含まれます。

現実世界でのRedisのアプリケーションには、1。キャッシュシステムとして、データベースクエリを加速し、2。Webアプリケーションのセッションデータを保存するには、3。リアルタイムランキングを実装する4。メッセージ配信をメッセージキューとして簡素化する。 Redisの汎用性と高性能により、これらのシナリオで輝きます。

Redisは、高速、汎用性、豊富なデータ構造のために際立っています。 1)Redisは、文字列、リスト、コレクション、ハッシュなどのデータ構造をサポートし、コレクションを注文します。 2)メモリを介してデータを保存し、RDBとAOFの持続性をサポートします。 3)Redis 6.0から始めて、マルチスレッドI/O操作が導入されました。これにより、高い並行性シナリオでパフォーマンスが向上しました。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









