Mybatisキャッシュ(第1レベルのキャッシュ、第2レベルのキャッシュ)
Mybatisキャッシュは、第1レベルのキャッシュと第2レベルのキャッシュに分けられます。Mybatisの第1レベルのキャッシュはデフォルトで有効になっています。第2レベルのキャッシュグローバルスイッチもデフォルトで有効になっていますが、CacheNamespaceを有効にするには設定する必要があります。
Mybatis-plusを例に取ってください
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
default-statement-timeout: 300
# mybatis二级缓存全局开关
cache-enabled: true
# mybatis一级缓存作用域(session、statement)
local-cache-scope: session
1つは、Mybatisの第1レベルのキャッシュです。
1.キャッシュモードは読み取り専用で、コピーではなくオブジェクト自体を返します。
2.無効にすることはできませんが、スコープのスコープはlocal-cache-scope:ステートメントで調整できます。ステートメントのスコープは無効と「同等」です(ステートメントには複数のSQLを含めることができ、これで完全に無効にすることはできません)時間)。
2、Mybatisセカンダリキャッシュ
1.キャッシュモードはデフォルトで読み取り/書き込みモードであり、オブジェクトのコピーを返します(オブジェクトのシリアル化)。これは、readWriteプロパティを設定することで調整できます。
@CacheNamespace(flushInterval = 600000, size = 4096, readWrite = true)
2.無効にすることができます
mybatis-plus:
configuration:
# mybatis二级缓存全局开关
cache-enabled: false
キャッシュのデフォルトの実装クラス:org.apache.ibatis.cache.impl.PerpetualCache
- PerpetualCacheはローカルメモリを使用します(クラスターモードでは注意して使用してください)。
- デコレータデザインパターンを使用して、キャッシュクラスorg.apache.ibatis.mapping.CacheBuilder#setStandardDecoratorsに豊富な関数を提供します。
3.キャッシュを自動的に更新します
同じ名前空間でデータが変更または削除されると、キャッシュは自動的に更新されます。他の名前空間でキャッシュを更新するには、@ CacheNamespaceRefアノテーションを使用します。
4.キャッシュを手動で更新します
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.CommParamDefEntity;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
/**
* @author ouruyi
*/
public interface CommonMapper extends BaseMapper<CommParamDefEntity> {
/**
* 刷新Mybatis二级缓存(一级缓存也会刷新)
* @return 'x'
*/
@Options(useCache = false, flushCache = Options.FlushCachePolicy.TRUE)
@Select("SELECT 'x' AS X FROM DUAL")
String flushCache();
}
3、パフォーマンスチューニング
- クエリパラメータとして動的パラメータを使用しないでください。たとえば、クエリパラメータとしての現在のシステム時刻により、mybatisキャッシュが無効になります。
- null値の内訳をredis
- ホットデータとコールドデータを分離します。キャッシュがいっぱいになるのを防ぐために、コールドデータをキャッシュに入れることはお勧めしません。(LRU)
- 適切なログ実装クラス
mybatis-plus:
configuration:
# 此处为mybatis-plus通过system.out输出日志到控制台,影响性能(禁用可提升数倍)
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
に:
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
- 接続プールの構成
druid:
filters: stat,config
min-idle: 10
max-active: 100
max-pool-prepared-statement-per-connection-size: 20
min-evictable-idle-time-millis: 300000
initial-size: 10
max-wait: 60000
time-between-eviction-runs-millis: 120000
pool-prepared-statements: true
# 高并发性能低
test-on-borrow: false
test-on-return: false
test-while-idle: true
# 持活,检测间隔默认1分钟(不宜超过3分钟,华为防火墙跨网段切断空闲连接时限3分钟)
keep-alive: false
validation-query: SELECT 'x' FROM DUAL
# 校验超时1秒
validation-query-timeout: 1
- 適切なスレッドプール、データベース接続プール