8.1 L1 cache
MyBatis has built-in a powerful transactional query caching mechanism, which can be easily configured and customized.
By default, only the local session cache, i.e. L1 cache, is enabled. It only caches the data in a session, i.e. an sqlsession.
Query different things
Adding, deleting and modifying may change the original data, so the cache will be refreshed
Query different Mapper.xml
Manually refresh cache
sqlSession.clearCache();//Manual cache cleanup
The L1 cache is enabled by default and is only valid in one sqlsession. It is essentially a map.
8.2 L2 cache
L2 cache is also called global cache. Its scope is a namespace, and a namespace corresponds to a L2 cache
When a session queries a data, the data will be placed in the first level cache
If the current session is closed, the L1 cache will disappear. What we want is that after the L1 cache expires, it will be saved in the L2 cache
When a new session queries the data, it reads the data from the L2 cache
The data found by different mapper s will be placed in their own cache (map)
The global cache is explicitly enabled. Although it is enabled by default, it is obvious to declare it
<!--Show global cache enabled--> <setting name="cacheEnabled" value="true"/>
To enable the global L2 cache, you only need to add a line to your SQL mapping file:
However, writing only the above will result in an error, because the L2 cache must be set to read-only. If it is not set, the entity class must be instantiated.
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
This more advanced configuration creates a FIFO cache, which is refreshed every 60 seconds. It can store up to 512 references of the result object or list, and the returned objects are considered read-only. Therefore, modifying them may conflict with callers in different threads.
Available purge strategies are:
LRU – least recently used: removes objects that have not been used for the longest time.
FIFO – first in first out: remove objects in the order they enter the cache.
SOFT – SOFT reference: removes objects based on garbage collector status and SOFT reference rules.
WEAK – WEAK references: remove objects more actively based on garbage collector status and WEAK reference rules.
The default purge policy is LRU.
size (number of references)
As long as the L2 cache is enabled, it is valid under the same mapper
All data will be put in the first level cache first
Only when the session is committed or closed will it be committed to the L2 cache
8.3 principle of cache
8.4 use of custom cache Ehcache
1. Guide coordinates
<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache --> <dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.2.1</version> </dependency>
2. Enable L2 cache in mapper
3. Import the ehcache.xml configuration file
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> <diskStore path="./tmpdir/Tmp_EhCache"/> <defaultCache eternal="false" maxElementsInMemory="10000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="259200" memoryStoreEvictionPolicy="LRU"/> <cache name="cloud_user" eternal="false" maxElementsInMemory="5000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="1800" memoryStoreEvictionPolicy="LRU"/> </ehcache>