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下操作。 |
MyBatisのシステムキャッシュバッファ1 ----はじめとシンプルな構成
おすすめ
転載: www.cnblogs.com/shar-wang/p/11614173.html
ランキング