Mybatisキャッシュ原理と失効状況解析


この文章は主にMybatisキャッシュ原理と失効状況解析を紹介しています。例コードで紹介された非常に詳細で、皆さんの学習や仕事に対して一定の参考学習価値を持っています。必要な友達は下記を参考にしてください。
1、キャッシュ[Cache]とは何ですか?
  • はメモリ中の一時データが存在する。
  • は、ユーザーがよく照会しているデータをキャッシュ(メモリ)に保存し、ユーザがデータを調べに行くと、ディスク(関係型データベースファイル)から照会する必要がなく、キャッシュから照会することによって、検索効率が向上し、高合併システムの性能問題が解決される。
  • 2、なぜキャッシュを使うのですか?
    データベースとの相互作用回数を減らし、システムオーバーヘッドを低減し、システム効率を向上させる。
    3、どのようなデータがキャッシュを使用する必要がありますか?
    常に検索していますが、変更しにくいデータです。
    4、Mybatisキャッシュ
  • MyBatisは非常に強力なクエリキャッシュの特性を含み、非常に便利にキャッシュをカスタマイズし、設定することができます。キャッシュは、クエリの効率を大幅に向上させることができます。
  • MyBatisシステムでは、デフォルトでは2つのキャッシュが定義されています。1つのキャッシュと2つのキャッシュ。
  • デフォルトでは、一級キャッシュのみがオンされます(Sql Sessionレベルのキャッシュは、ローカルキャッシュとも呼ばれる)
  • 段のキャッシュは手動で開いて構成する必要があります。彼はnamespaceレベルのキャッシュに基づいています。
  • 拡張性を高めるために、MyBatisはキャッシュインターフェースCacheを定義している。Cacheインターフェースを実現することによって、二次キャッシュ
  • をカスタマイズすることができます。
    5、一級キャッシュ
    一級キャッシュはローカルキャッシュとも呼ばれます。
  • は、データベースと同じセッション中に照会したデータをローカルキャッシュに格納する。
  • 以降、同じデータを取得する必要があれば、直接にキャッシュから取って、データベースを調べなくてはいけません。
  • 6、一級キャッシュが失効した四つの状況
  • sql Sessionの違い
  • sql Sessionは同じで、照会条件は違っています。
  • sql Sessionは同じで、2回のクエリの間で添削操作を実行しました。
  • sql Sessionと同じで、手動で一級キャッシュ
  • をクリアします。
    
    @Test
    public void testQueryUserById(){
      SqlSession session = MybatisUtils.getSession();
      UserMapper mapper = session.getMapper(UserMapper.class);
      User user = mapper.queryUserById(1);
      System.out.println(user);
      session.clearCache();//      
      User user2 = mapper.queryUserById(1);
      System.out.println(user2);
      System.out.println(user==user2);
      session.close();
    }
    ですから、一級キャッシュは一つのmapです。
    7、二級キャッシュ
  • 二級キャッシュも大域キャッシュといい、一級キャッシュの機能領域が低すぎるので、二級キャッシュ
  • が誕生しました。
  • は、namespaceレベルのキャッシュに基づいて、1つの名前空間は、1つの2つのレベルのキャッシュに対応する。
  • 作業メカニズム
  • セッションがデータを照会すると、このデータは現在のセッションの1レベルキャッシュに入れられます。
  • 現在のセッションが終了したら、このセッションに対応する一級キャッシュはなくなります。しかし、私たちが欲しいのは、セッションが終了し、1レベルキャッシュのデータが2レベルキャッシュに保存されます。
  • 新しいセッションクエリ情報は、二次キャッシュからコンテンツを取得することができます。
  • の異なるmapperで検出されたデータは自分の対応するキャッシュ(map)に入れられます。
  • 使用手順:
    コア設定ファイル
    <setting name=「cacheEnbaled」value=「true」/>
    各mapper.xmlに2級キャッシュを配置してください。この配置はとても簡単です。
    方式一:
    
    <cache/>
    方式二:
    
    <cache
     eviction="FIFO"
     flushInterval="60000"
     size="512"
     readOnly="true"/>
    このより高度な構成は、60秒ごとに更新され、結果のオブジェクトまたはリストの512個の参照が最大で記憶され、戻ったオブジェクトは読み取り専用と見なされているため、それらを修正すると、異なるスレッド内の使用者が衝突する可能性がある。
    8、結論
    二級キャッシュを開けたら、同じMapperの中で調べます。二級キャッシュでデータを入手できます。
    検出されたデータはデフォルトで一級キャッシュに入れられます。
    セッションのコミットまたは終了後にのみ、1レベルキャッシュのデータが2レベルキャッシュに転送されます。
    原理図:

    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。