MyBatis キャッシュ戦略分析: 1 次キャッシュと 2 次キャッシュのベスト プラクティス
MyBatis を開発に使用する場合、多くの場合、キャッシュの選択を検討する必要があります。戦略。 MyBatisのキャッシュは主に1次キャッシュと2次キャッシュの2種類に分かれます。第 1 レベルのキャッシュは SqlSession レベルのキャッシュであり、第 2 レベルのキャッシュはマッパー レベルのキャッシュです。実際のアプリケーションでは、これら 2 つのキャッシュを合理的に使用することが、システムのパフォーマンスを向上させる重要な手段となります。この記事では、MyBatis の 1 次キャッシュと 2 次キャッシュのベスト プラクティスを、具体的なコード例を通じて分析します。
1. 一次キャッシュ
MyBatis では、各 SqlSession がローカル キャッシュを維持します。レベルキャッシュ。同じSqlSession内で同じクエリを実行する場合、MyBatisはまず1次キャッシュから検索を行い、該当する結果が見つかった場合にはデータベースへのクエリを行わずに直接その結果を返します。
一次キャッシュのライフ サイクルは、SqlSession のライフ サイクルと同じです。 、SqlSession が閉じられない限り、一次キャッシュのライフサイクル データは保持されます。
次は、一次キャッシュの使用方法を示す簡単なコード例です。
// 获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建Mapper接口代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 第一次查询 User user1 = userMapper.selectUserById(1); // 第二次查询,因为是同一个SqlSession,会从一级缓存中获取结果 User user2 = userMapper.selectUserById(1); // 关闭SqlSession sqlSession.close();
上記のコードでは、最初と 2 番目のクエリは同じ ID を使用し、操作は同じ SqlSession で実行されるため、2 番目のクエリは 1 次キャッシュから直接結果を取得します。
2. 2次キャッシュ
2次キャッシュはマッパーレベルのキャッシュです。 SqlSession は同じマッパーを共有し、オブジェクトの第 2 レベルのキャッシュを共有します。複数の SqlSession が同じ Mapper の同じデータをクエリする場合、まず 2 次キャッシュから検索し、見つかった場合はデータベースにクエリせずに直接返します。
2次キャッシュを使用するには、MyBatis構成ファイルで対応する構成を行う必要があります:
<setting name="cacheEnabled" value="true"/>
次は、2 次キャッシュの使用方法を示す簡単なサンプル コードです。
// 获取第一个SqlSession SqlSession sqlSession1 = sqlSessionFactory.openSession(); UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class); User user1 = userMapper1.selectUserById(1); sqlSession1.close(); // 获取第二个SqlSession SqlSession sqlSession2 = sqlSessionFactory.openSession(); UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class); User user2 = userMapper2.selectUserById(1); sqlSession2.close();
上記のコードでは、最初と 2 番目のキャッシュがSqlSession クエリ 同じ ID では、2 次キャッシュがオンになっているため、2 番目のクエリは 2 次キャッシュから結果を直接取得します。
3. キャッシュの無効化
キャッシュによりシステムのパフォーマンスが向上しますが、場合によってはキャッシュの無効化が発生する可能性があります。データの正確性を確保するには、キャッシュを適時にクリアする必要があります。一般的なキャッシュ障害の状況には、データ更新、手動キャッシュ クリーニング、キャッシュの有効期限などが含まれます。
一次キャッシュの場合、キャッシュ無効化が発生した場合、現在の SqlSession を閉じてキャッシュをクリアするだけで済みます。 2 次キャッシュの場合は、対応するメソッドを使用してキャッシュ データをクリーンアップまたは更新する必要があります。
結論
一次キャッシュと二次キャッシュを適切に使用するとシステムのパフォーマンスが向上しますが、キャッシュの障害に注意し、キャッシュを適切なタイミングでクリアして回避する必要があります。データの不整合。実際のプロジェクトでは、システムのパフォーマンスとユーザー エクスペリエンスを向上させるために、特定のニーズに基づいて適切なキャッシュ戦略を選択する必要があります。
以上は、MyBatis のキャッシュ戦略の分析と、一次キャッシュと二次キャッシュのベスト プラクティスについて説明しました。
以上がMyBatis キャッシュ戦略分析: 1 次キャッシュと 2 次キャッシュのベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。