Mybatisキャッシュ(第1レベルのキャッシュ、第2レベルのキャッシュ)

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
  • 適切なスレッドプール、データベース接続プール

おすすめ

転載: blog.csdn.net/ory001/article/details/109816471