mybatisレベル1キャッシュのダーティデータ:
Mybatisの第1レベルのキャッシュ:デフォルトはSqlSessionレベルです。セッションを通じてチェックされたデータがあれば、セッションに配置されます。次に同じIDのデータがクエリされると、代わりにキャッシュから直接取得されます。データベースから取得されます。
生成されたダーティデータ:異なるsqlSessionがデータベースで動作している場合、第1レベルのキャッシュは、現在のsqlSessionの追加、削除、および変更が第1レベルのキャッシュで自動的に更新されることのみを保証でき、ダーティデータが生成されます。
mybatisセカンダリキャッシュのダーティデータ:
Mybatisの第2レベルのキャッシュ:これはSessionFactoryレベルであり、名前空間にバインドされています。同じ名前空間がキャッシュオブジェクトに配置されます。このnamaspaceで非選択ステートメントが実行されると、名前空間全体のキャッシュがクリアされます。
生成されたダーティデータ:ダーティ読み取りを引き起こす操作は、通常、複数テーブルの関連付け操作で発生します。たとえば、2つの異なるマッパーには、マッパーの1つがクエリ操作を実行するときに、同じテーブルの追加、削除、変更、およびクエリ操作が含まれます。このテーブルでは、この時点で、別のマッパーが更新操作を実行してキャッシュを更新し、最初のマッパーが再度クエリを実行します。次に、今回クエリされたデータはダーティデータです。ダーティリードの理由は、それらの操作のキャッシュが同じではないためです。
したがって、サードパーティのキャッシュ(memcachedまたはredis)を使用することをお勧めします。
ダーティリードを回避するためにredisのキャッシュを更新するにはどうすればよいですか?
部分の読み取りと書き込み:
if(redis存在数据){
读取redis数据
}else{
数据库读取,同时存redis+设置超时时间
パーツの更新:
if(数据库update){
更新redis+设置超时时间