MyBatisのシステムキャッシュバッファ1 ----はじめとシンプルな構成

 

MyBatisのキャッシュ

  システムキャッシュ:一般的なキャッシュと二次キャッシュ

キャッシュ

  SQLSESSIONキャッシュは、レベル・キャッシュで、データベースは、オブジェクトに操作SQLSESSIONオブジェクトに内蔵する必要があるキャッシュされたデータを格納するためのデータ構造を有しています。異なる領域間のキャッシュデータは、相互SQLSESSION影響を受けません。別のキャッシュデータを読み取ることができない間つまり、SQLSESSIONオブジェクトの唯一の役割である相互SQLSESSIONです。

   キャッシュ作品

  

 

 

   口頭発表:

  ユーザーがリクエストクエリのレコードを開始すると読み取りに存在する場合、それはデータベースからデータを取得するために存在しない場合は、SQLSESSION既存のキャッシュデータは、読み込みます。

  コミット操作は、キャッシュをクリアしますSQLSESSION。これは、ダーティリードを避けるために行われます。

  

  注意:あなたがキャッシュを空にしていない場合は、エラーが発生したコミット。例:アイテムだけでなく、10と10は10人の顧客に買収された後、商品のキャッシュにキャッシュされたユーザーのクエリ、データがすぐ削除されますが、この製品は、キャッシュから次のクエリです取得。ダーティデータが表示されます

  MyBatisの統合で春

  ばねSQLSESSIONにサービスごとに、トランザクション管理サービス内に配置された後、自動的にorg.spring.mapper.MapperScannerConfigurerであるとMyBatisのスプリングによって、各クエリにサービスSQLSESSIONに注入作成され、異なります閉じるSQLSESSION、データが閉じた後に消去されますので、トランザクション・サポートがない場合は春の統合後、L1キャッシュは無意味です。

 

  二次キャッシュ

    二次キャッシュ作品

  

 

 

     口頭発表:

    二次キャッシュマッパレベルキャッシュ、SQLSESSION複数の、sql'SessionマッパSQL文を操作する同じ複数の二次キャッシュ、SQLSESSION横切って二次キャッシュを共有しました。

   每一个mapper都有一个二级缓存区域(按照namespace区分),每一个namespace的mapper都有二级缓存区域,两个mapper的namespace相同,这两个mapper执行的Sql查询数据存储在同一个二级缓存区域。

    

   开启二级缓存

    1.打开总开关:

    在mybatis的xml文件中加入:

    <settings>

      <setting name="cacheEnabled" value="true"/>

    <settings/>

    2.在需要开启二级缓存的mapper.xml文件中引入<cache />

    3.让使用二级缓存的POJO类实现Serializable(序列化)接口

    注:springboot中默认开启了全局二级缓存,如果使用二级缓存需要在mapper上注明。@CacheNamespace

 

    总结:

    好处:对于查询多,commit操作少的。用户对查询条件实时性数据要求不高,采用二级缓存可以降低数据库访问量,提高数据库访问性能。

    弊端:二级缓存是建立在一个namespace下的,如果是多个namespace那么数据可能是错误的。

      

     举例说明:

    部门和部门员工,部门存储在部门的二级缓存下,部门员工存储在部门员工的二级缓存下。如果有人对部门信息进行修改,那么影响的就只有部门的二级缓存,如果在进行查询时,部门员工信息时从部门员工的二级缓存中获取的。这时候的数据是已经过时的。

 

    使用二级缓存的问题:

    对该表的操作都是同一个namespace下,其他namespace如果有操作就会发生脏读。

    对关联表的操作,关联表的所有表的操作都必须在同一个namespace下操作。

おすすめ

転載: www.cnblogs.com/shar-wang/p/11614173.html