缓存

MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。

 

一级缓存[本地会话缓存](默认开启): 

比如在一个方法中sqlSession 创建后可以多次调用其方法      等到sqlSession.close 后就全部失效

一级缓存失效的情况:

1.查询不同的东西

2.增删改操作(因为可能会改变原来的数据,必定会刷新缓存)

3.查询不同的mapper.xml

4.手动清除缓存  sqlSession.clearCache()

 

 

二级缓存(也叫全局缓存,诞生是因为一级缓存作用域太低)

基于namespace,在一个mapper范围内全部生效

 

 

默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件(映射接口中方法的xml文件)中添加一行(这个是设置二级缓存属性,开启的话是在config文件中):

<cache/>

 

 步骤:

1.需要提前开启全局缓存  在设置settings 里面 设置

 <setting name="cacheEnabled" value="true"/>

2.在需要的mapper.xml中加入标签(标签可以自定义一些属性,一般默认的就行)

<cache
  eviction="FIFO"
  flushInterval="60000"
  size="512"
  readOnly="true"/>

这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,
而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。

 

缓存流程图 

 

 

额外补充

单条sql语句也能设置缓存相关  利用标签里面的

***userCache属性(是否缓存)  false不缓存(变更次数频繁的时候用)   

***flushCashe属性(是否刷新) false不刷新

 

自定义缓存-ehcache

<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.2.1</version>
</dependency>

在cache里面加入type标签

<cache type="org.mybatis.caches.ehcache.EhcacheCache" />

ehcache.xml

复制代码
<?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>
View Code
复制代码

 

Redis  K-V键值对

 

posted @   磕伴  阅读(337)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示