Mybatis-Cache类介绍

发布时间:2023年12月26日

🌺个人主页:杨永杰825_Spring,Mysql,多线程-CSDN博客

🎉相关链接:MyBatis缓存机制(一级缓存,二级缓存)-CSDN博客

?每日一句:成为架构师路途遥远

📢欢迎大家:关注🔍+点赞👍+评论📝+收藏??

目录

前言

PerpetualCache

1.配置全局缓存:

2.配置Mapper级别的缓存:

3.配置缓存的过期时间和清除策略:

BlockingCache

1.配置全局缓存:

2.配置Mapper级别的缓存:

LruCache

1.配置全局缓存:

2.配置Mapper级别的缓存:


前言

  • Mybatis-Cache类是Mybatis框架中用于缓存数据的类。它是一个接口,定义了缓存数据的基本操作方法。具体的实现类有PerpetualCache、FifoCache、LruCache等。
  • Mybatis-Cache类的主要作用是提高数据库访问性能。当应用程序需要访问数据库时,首先会先到缓存中查找数据,如果缓存中存在数据,则直接返回缓存数据,避免了繁重的数据库访问操作;如果缓存中不存在数据,再去数据库中查询,并将查询结果放入缓存中。
  • Mybatis-Cache类的使用非常简单,在Mybatis的配置文件中配置即可。可以配置全局缓存(application级别),也可以配置指定Mapper的缓存(Mapper级别)。配置方式包括cacheEnabled属性、eviction属性、flushInterval属性等。
  • Mybatis-Cache类还支持缓存的回收策略,可以配置缓存的过期时间、最大缓存数量等。在缓存的回收策略中,Mybatis提供了多种实现方式,如基于FIFO(先进先出)算法的FifoCache、基于LRU(最近最少使用)算法的LruCache等。
  • 总的来说,Mybatis-Cache类是Mybatis框架中的一个重要组件,能够极大地提高数据库访问性能,减轻数据库的负载。使用Mybatis-Cache类,可以高效地缓存数据,提高应用程序的性能。

PerpetualCache

PerpetualCache是Mybatis中的默认缓存实现类,它是一个无限容量的缓存,不会自动过期或清除缓存。

使用PerpetualCache非常简单,只需要在Mybatis的配置文件中进行相应的配置即可。以下是一个使用PerpetualCache的示例:

1.配置全局缓存:

在Mybatis的配置文件中,可以通过cacheEnabled属性来启用全局缓存,并配置使用PerpetualCache类作为缓存实现。

<configuration>
    ...
    <settings>
        ...
        <setting name="cacheEnabled" value="true"/>
    </settings>
    ...
</configuration>

2.配置Mapper级别的缓存:

可以在Mapper接口对应的Mapper.xml文件中配置指定Mapper级别的缓存,并指定使用PerpetualCache类作为缓存实现。

<mapper namespace="com.example.mapper">
    <cache type="org.apache.ibatis.cache.impl.PerpetualCache"/>
    ...
</mapper>

3.配置缓存的过期时间和清除策略:

由于PerpetualCache不会自动清除缓存,可以通过配置flushInterval属性来设置缓存的过期时间,单位为毫秒。同时,还可以配置eviction属性来设置缓存的清除策略,如LRU(最近最少使用)或FIFO(先进先出)。

<cache type="org.apache.ibatis.cache.impl.PerpetualCache">
    <property name="flushInterval" value="60000"/>
    <property name="eviction" value="LRU"/>
</cache>

需要注意的是,虽然PerpetualCache具有无限容量的特性,但在实际使用中,仍然需要注意配置合适的缓存策略、过期时间和清除策略,以避免缓存数据过多导致内存溢出等问题。

BlockingCache

  • BlockingCache是Mybatis中提供的一个缓存装饰器(Decorator),它可以用来包装其他的缓存实现,增加缓存的并发控制功能。
  • BlockingCache的主要作用是,在缓存未命中时,阻塞其他并发请求,直到获取到缓存数据为止。这样可以避免缓存穿透的问题,提高系统的并发性能。

使用BlockingCache非常简单,只需要在Mybatis的配置文件中进行相应的配置即可。以下是一个使用BlockingCache的示例:

1.配置全局缓存:

在Mybatis的配置文件中,可以通过cacheEnabled属性来启用全局缓存,并指定使用BlockingCache类作为缓存实现的装饰器。

<configuration>
    ...
    <settings>
        ...
        <setting name="cacheEnabled" value="true"/>
        <setting name="localCacheScope" value="SESSION"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="true"/>
    </settings>
    ...
</configuration>

2.配置Mapper级别的缓存:

可以在Mapper接口对应的Mapper.xml文件中配置指定Mapper级别的缓存,并指定使用BlockingCache类作为缓存实现的装饰器。

<mapper namespace="com.example.mapper">
    <cache type="org.apache.ibatis.cache.decorators.BlockingCache">
        <property name="delegate" value="org.apache.ibatis.cache.impl.PerpetualCache"/>
    </cache>
    ...
</mapper>

需要注意的是,BlockingCache是一个装饰器,所以需要配置delegate属性指定被装饰的缓存实现。在上述示例中,PerpetualCache作为被装饰的缓存实现。

另外,还可以通过配置blockingTimeout属性来设置获取缓存数据的超时时间,单位为毫秒,默认为5000(即5秒)。如果在超时时间内未能获取到缓存数据,将会返回null。可以根据实际情况进行调整。

<cache type="org.apache.ibatis.cache.decorators.BlockingCache">
    <property name="delegate" value="org.apache.ibatis.cache.impl.PerpetualCache"/>
    <property name="blockingTimeout" value="10000"/>
</cache>

LruCache

  • LruCache是Mybatis中提供的一个缓存装饰器(Decorator),它可以用来包装其他的缓存实现,实现基于最近最少使用(Least Recently Used)策略的缓存淘汰机制。
  • LruCache会维护一个固定大小的缓存容器,在缓存容器已满的情况下,当有新的缓存数据添加进来时,会将最近最少使用的缓存数据从容器中剔除,为新数据腾出空间。

使用LruCache非常简单,只需要在Mybatis的配置文件中进行相应的配置即可。以下是一个使用LruCache的示例:

1.配置全局缓存:

在Mybatis的配置文件中,可以通过cacheEnabled属性来启用全局缓存,并指定使用LruCache类作为缓存实现的装饰器。

<configuration>
    ...
    <settings>
        ...
        <setting name="cacheEnabled" value="true"/>
        <setting name="localCacheScope" value="SESSION"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="true"/>
    </settings>
    ...
</configuration>

2.配置Mapper级别的缓存:

可以在Mapper接口对应的Mapper.xml文件中配置指定Mapper级别的缓存,并指定使用LruCache类作为缓存实现的装饰器。

<mapper namespace="com.example.mapper">
    <cache type="org.apache.ibatis.cache.decorators.LruCache">
        <property name="size" value="1024"/>
        <property name="delegate" value="org.apache.ibatis.cache.impl.PerpetualCache"/>
    </cache>
    ...
</mapper>

需要注意的是,LruCache是一个装饰器,所以需要配置delegate属性指定被装饰的缓存实现。在上述示例中,PerpetualCache作为被装饰的缓存实现。

另外,还可以通过配置size属性来设置缓存容器的大小,表示最多可以缓存多少条数据。在上述示例中,缓存容器大小被设置为1024条。

<cache type="org.apache.ibatis.cache.decorators.LruCache">
    <property name="size" value="1024"/>
    <property name="delegate" value="org.apache.ibatis.cache.impl.PerpetualCache"/>
</cache>

需要根据实际情况,合理设置缓存容器的大小,以兼顾缓存的命中率和内存的消耗。

文章来源:https://blog.csdn.net/qq_31536117/article/details/135200758
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。