目次
キャッシュの侵入
キャッシュの故障
キャッシュ雪崩
キャッシュの一貫性
ホームページ Java &#&チュートリアル Java 分散キャッシュ システムが解決する必要がある 4 つの主要な問題は何ですか?

Java 分散キャッシュ システムが解決する必要がある 4 つの主要な問題は何ですか?

Apr 22, 2023 pm 02:40 PM
java

分散キャッシュ システムは 3 層アーキテクチャに不可欠な部分であり、プロジェクト全体の同時実行性と応答速度を大幅に向上させますが、解決すべき新たな問題ももたらします。つまり、キャッシュの侵入、キャッシュの破壊です。 、キャッシュなだれとキャッシュの一貫性の問題。

キャッシュの侵入

最初の大きな問題はキャッシュの侵入です。この概念は理解しやすく、ヒット率に関連しています。ヒット率が低い場合、データベース永続層に負荷が集中します。

関連するデータが見つかった場合は、それをキャッシュできます。しかし問題は、このリクエストがキャッシュ層または永続化層にヒットしなかったことであり、この状況はキャッシュ侵入と呼ばれます。

Java 分散キャッシュ システムが解決する必要がある 4 つの主要な問題は何ですか?

たとえば、上の図に示すように、ログイン システムでは外部からの攻撃があり、存在しないユーザーを使用してログインを試行し続けます。ユーザーは仮想であるため、事実上キャッシュされ、毎回データベース内でクエリが実行されるため、最終的にはサービスのパフォーマンス障害が発生します。

この問題には多くの解決策がありますので、簡単に紹介しましょう。

1 つ目は、空のオブジェクトをキャッシュすることです。永続層がデータを見つけられないということではないでしょうか?次に、このリクエストの結果を null に設定し、キャッシュに入れることができます。適切な有効期限を設定することで、バックエンド データベースのセキュリティを確保できます。

空のオブジェクトをキャッシュすると追加のキャッシュ スペースが占有され、データの不整合が発生する時間枠も発生するため、2 番目の方法は、ブルーム フィルターを使用して大量の通常のキー値を処理することです。

レコードの有無はブール値であり、1 ビットのみを使用して格納できます。ブルーム フィルターは、この「はい」と「いいえ」の操作をデータ構造に圧縮できます。たとえば、携帯電話番号やユーザーの性別などのデータは、ブルーム フィルターの使用に非常に適しています。

キャッシュの故障

キャッシュの故障とは、ユーザー リクエストがデータベースに到達する状況を指します。ほとんどの場合、キャッシュ時間のバッチの有効期限が切れることが原因です。

通常、キャッシュ内のデータには有効期限が設定されています。あるタイミングでデータベースから大量のデータを取得し、同じ有効期限を設定すると、同時に有効期限が切れてしまい、キャッシュが壊れてしまいます。

ホット データの場合は、有効期限が切れないように設定したり、アクセス時に有効期限を更新したりできます。バッチに保存されたキャッシュされたアイテムの場合は、同時に無効になることを避けるために、比較的平均的な有効期限を割り当てるようにしてください。

キャッシュ雪崩

雪崩と聞くと怖そうですが、実際の状況はもっと深刻です。キャッシュはシステムを高速化するために使用され、バックエンド データベースはデータのバックアップにすぎず、高可用性の代替手段ではありません。

キャッシュ システムに障害が発生すると、トラフィックは即座にバックエンド データベースに転送されます。やがて、データベースは大量のトラフィックによって圧倒されてハングアップし、この連鎖的なサービス障害はまさに雪崩と呼ぶことができます。

Java 分散キャッシュ システムが解決する必要がある 4 つの主要な問題は何ですか?

高可用性キャッシュの構築は非常に重要です。 Redis はマスター/スレーブ モードとクラスター モードを提供します。クラスター モードは使いやすく、各シャードは独立してマスター/スレーブとしても機能するため、非常に高い可用性が保証されます。

さらに、データベースのパフォーマンスのボトルネックについての一般的な評価も行っています。キャッシュ システムがクラッシュした場合は、電流制限コンポーネントを使用して、データベースに流れるリクエストを遮断できます。

キャッシュの一貫性

キャッシュ コンポーネントの導入後の別の困難な問題は、キャッシュの一貫性です。

まず、問題がどのように発生したかを見てみましょう。キャッシュ項目の場合、書き込み、更新、読み取り、削除という 4 つの一般的な操作があります。

  • 書き込み: キャッシュとデータベースは 2 つの異なるコンポーネントであるため、二重書き込みが行われると、どちらか一方の書き込みのみが成功し、データの不整合が発生する可能性があります。

  • 更新: 更新状況は似ており、2 つの異なるコンポーネントを更新する必要があります。

  • 読み取り: キャッシュから読み取られた情報が最新であり、データベース内の情報と一致していることを確認するために読み取ります。

  • 削除: データベース レコードを削除する場合、キャッシュ内のデータを削除するにはどうすればよいですか?

ビジネス ロジックは、ほとんどの場合、比較的複雑であるためです。更新操作には非常にコストがかかります。たとえば、ユーザーの残高は一連の資産を計算して計算される数値です。これらの関連アセットが変更されるたびにキャッシュを更新する必要がある場合、コード構造は非常に混乱し、保守が不可能になります。

キャッシュ同期を非常に簡単にできる遅延読み込みメソッドを使用して、トリガーされたキャッシュ整合性メソッドを使用することをお勧めします。

  • キャッシュを読み取るとき、キャッシュ内に関連するデータがない場合、関連するビジネス ロジックが実行され、キャッシュ データが構築され、キャッシュ システムに保存されます。

  • キャッシュ アイテムに関連するリソースが変更されると、まず対応するキャッシュ アイテムが削除され、次にデータベース内のリソースが更新され、最後に対応するキャッシュ アイテムが削除されます。

単純なプログラミング モデルに加えて、この操作には明らかな利点があります。このキャッシュは使用するときにのみキャッシュ システムにロードされます。変更が行われるたびにリソースが作成および更新される場合、キャッシュ システムには大量のコールド データが存在します。これは実際には、オンデマンドでデータ ストレージからキャッシュにデータをロードするキャッシュ アサイド パターンを実装しており、最大の効果はパフォーマンスの向上と不要なクエリの削減です。

しかし、これにはまだ問題があります。次に紹介するシナリオも面接でよく聞かれる質問です。

前述のデータベース更新アクションとキャッシュ削除アクションは、明らかに同じトランザクション内にありません。これにより、更新プロセス中にデータベースの内容とキャッシュ内の内容が不一致になる可能性があります。

面接では、この質問を指摘する限り、面接官は親指を立てます。

分散ロックを使用すると、この問題を解決できます。ロックを使用すると、データベース操作とキャッシュ操作を他のキャッシュ読み取り操作から分離できます。一般に、読み取り操作にはロックは必要ありませんが、ロックが発生すると再試行し、タイムアウトになるまで待機します。

以上がJava 分散キャッシュ システムが解決する必要がある 4 つの主要な問題は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Spring Tool Suiteで最初のSpring Bootアプリケーションを実行するにはどうすればよいですか? Feb 07, 2025 pm 12:11 PM

Spring Bootは、Java開発に革命をもたらす堅牢でスケーラブルな、生産対応のJavaアプリケーションの作成を簡素化します。 スプリングエコシステムに固有の「構成に関する慣習」アプローチは、手動のセットアップを最小化します。

See all articles