Mybatis-Cache类介绍
🌺个人主页:杨永杰825_Spring,Mysql,多线程-CSDN博客
🎉相关链接:MyBatis缓存机制(一级缓存,二级缓存)-CSDN博客
?每日一句:成为架构师路途遥远
📢欢迎大家:关注🔍+点赞👍+评论📝+收藏??
目录
前言
- 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>
需要根据实际情况,合理设置缓存容器的大小,以兼顾缓存的命中率和内存的消耗。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!