mybatis 一次キャッシュと二次キャッシュは、mybatis が提供する 2 つの異なるレベルのキャッシュ メカニズムです。一次キャッシュは、mybatis でデフォルトで有効になっているキャッシュ メカニズムです。スレッドに基づくローカル キャッシュです。 2 番目のレベルのキャッシュは、名前空間レベルに基づいたキャッシュであり、複数の SqlSession オブジェクトで共有できます。
# このチュートリアルのオペレーティング システム: Windows 10 システム、Dell G3 コンピューター。
MyBatis は、データベース クエリのパフォーマンスを向上させるためのいくつかのキャッシュ メカニズムを提供するオープン ソースの永続層フレームワークです。その中で、MyBatis の 1 次キャッシュと 2 次キャッシュは、2 つの異なるレベルのキャッシュ メカニズムです。
一次キャッシュは、MyBatis でデフォルトで有効になっているキャッシュ メカニズムであり、スレッドベースのローカル キャッシュです。つまり、各 SqlSession オブジェクトには独自の 1 次キャッシュがあります。クエリ操作を実行するとき、MyBatis は最初に同じクエリが 1 次キャッシュに存在するかどうかを確認し、存在する場合はデータベースにクエリを実行せずにキャッシュから結果を直接取得します。これにより、データベースへのアクセス数が減り、クエリのパフォーマンスが向上します。
一次キャッシュのライフ サイクルは、SqlSession のライフ サイクルと一致します。 SqlSession が閉じられるか、キャッシュがクリアされると、1 次キャッシュもクリアされます。一次キャッシュはデフォルトで有効になっており、一次キャッシュを閉じるかクリアしたい場合は、SqlSession の clearCache() メソッドを呼び出します。
一次キャッシュはクエリのパフォーマンスを向上させることができますが、いくつかの問題もあります。まず、一次キャッシュはスレッドベースのローカルキャッシュであるため、マルチスレッド環境ではデータの不整合が発生する可能性があります。次に、同じ SqlSession 内で更新、削除、または挿入の操作が実行されると、1 次キャッシュがクリアされ、次のクエリ時にデータベースが再度クエリされます。したがって、1 次キャッシュは、読み取りが多く書き込みが少ないシングルスレッドのシナリオに適しています。
一次キャッシュの問題を解決するために、MyBatis は二次キャッシュを提供します。 2 次キャッシュは名前空間レベルのキャッシュに基づいており、複数の SqlSession オブジェクトで共有できます。複数の SqlSession オブジェクトが同じクエリを実行する場合、クエリ結果が 2 次キャッシュに存在する場合、結果はデータベースにクエリを実行せずにキャッシュから直接取得されます。
2次キャッシュのライフサイクルは、マッパーのライフサイクルと一致します。マッパーの SqlSessionFactory が閉じられるか、キャッシュがクリアされると、2 次キャッシュもクリアされます。 2 次キャッシュを使用する場合は、Mapper 構成ファイルでそれに応じて構成する必要があります。
一次キャッシュと比較して、二次キャッシュは適用範囲が広いです。マルチスレッド環境におけるデータの不整合の問題を解決でき、複数の SqlSession オブジェクトが同じクエリ結果を共有するシナリオに適しています。ただし、2次キャッシュにもいくつかの問題があります。まず、2 次キャッシュは名前空間レベルに基づいているため、2 次キャッシュは異なる名前空間の下では互いに独立しています。次に、更新、削除、または挿入操作が同じ名前空間で実行されると、2 次キャッシュがクリアされます。
一般に、一次キャッシュと二次キャッシュは、MyBatis が提供する 2 つの異なるレベルのキャッシュ メカニズムです。第 1 レベルのキャッシュは、スレッドに基づくローカル キャッシュであり、読み取りが多く書き込みが少ないシングル スレッドのシナリオに適しています。一方、第 2 レベルのキャッシュは、複数の SqlSession オブジェクトで共有できる名前空間レベルのキャッシュです。複数のスレッドと頻繁な読み取りと書き込みを行うシナリオに適しています。実際の開発では、特定のビジネス ニーズとパフォーマンス要件に従って、適切なキャッシュ メカニズムを選択してクエリ パフォーマンスを向上させることができます。
以上がmybatis の 1 次キャッシュと 2 次キャッシュとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。