Principio de caché de segundo nivel de Mybatis
El alcance del caché de primer nivel es el nivel Sqlsession, lo que significa que diferentes sesiones SQL no ocuparán el caché de primer nivel, por lo que si necesita almacenar en caché entre sesiones SQL, debe usar la caché de segundo nivel.
La caché de segundo nivel está desactivada de forma predeterminada, por lo que debemos activarla. El sitio web oficial también presenta cómo abrirlo. Necesitamos activar la función de caché de segundo nivel en el archivo de configuración principal mybatis-config.xml y agregar la etiqueta
Veamos primero un ejemplo.
El resultado de la ejecución es inesperado. ¿Por qué habilitar la función de caché de segundo nivel? Como resultado, SQL se ejecutó dos veces y el caché no estaba ocupado. De hecho, hay otro punto a tener en cuenta en el caché de segundo nivel, es decir, la transacción debe enviarse al caché de segundo nivel para guardar el registro. Debido a que se ha compartido entre SqlSession*** * *, el Se debe enviar la transacción; de lo contrario, se leerán datos incorrectos debido al desplazamiento.
Una cosa a tener en cuenta es que el Ejecutor en la Sqlsession de caché de segundo nivel es en realidad un CachingExecutor.
Sabemos que la ejecución final de getMapper irá al método invocador en la clase MapperProxy. Analizaremos esta clase en detalle.
Finalmente llegamos al punto clave.
Podemos pensar en CacheKey como el identificador único correspondiente a cada método.
Aquí podemos ver por qué estos dos deben configurarse primero, y CachingExecutor se empaquetará con un ejecutor de caché cuando cacheEnable esté activado, y
TCM está aquí
En este punto, casi hemos revelado el secreto del caché de segundo nivel. Lo importante es
En cuanto a por qué se necesita el envío de transacciones para acceder al caché L2, podemos entenderlo mirando. el método de venta.
El putObject aquí en realidad no almacena el valor en el caché, sino en el mapa que se enviará, así que veamos qué hace la confirmación.
Ver tcm.commit()
Aquí puede ver que se atravesará todo TransactionCache y que también se ejecutará el método de confirmación.
La verdad saldrá a la luz: se recorrerá el mapa que se enviará y todos los valores que contiene se almacenarán en el caché, de modo que las consultas posteriores puedan obtener los valores directamente del caché.
Resumen
El caché de segundo nivel primero empaquetará el Ejecutor en la sesión Sql en un CacheingExecutor. Todo el SQL pasará por esta clase, y esta clase pasará la única
p>