MyBatis로 시스템 캐시 버퍼 1 ---- 소개 및 간단한 구성

 

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下操作。

추천

출처www.cnblogs.com/shar-wang/p/11614173.html