Mybatisキャッシュはデータがダーティになる傾向があります。サードパーティのキャッシュ(memcachedまたはredis)を使用することをお勧めします。

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+设置超时时间

おすすめ

転載: blog.csdn.net/weixin_44371237/article/details/114129326