美文网首页
mybatis 二级cache

mybatis 二级cache

作者: 阿波罗程序猿 | 来源:发表于2016-08-22 18:08 被阅读494次

一:mybatis 介绍cache和使用cache


mybatis自带的缓存构架,方便配置、功能强大、定制方便。默认情况下cache是没有被开启的。想要开启此功能需要在sql映射文件中添加这样一行:
<cache />

添加这一行后,会产生如下效果:
  • 映射语句文件中的所有select 语句将会被缓存。
  • 映射语句文件中的所有insert,update 和delete 语句会刷新缓存。
  • 缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回。
  • 根据时间表(比如no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序来刷新。
  • 缓存会存储列表集合或对象(无论查询方法返回什么)的1024 个引用。
  • 缓存会被视为是read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

以上所有的属性都可以通过<cache /> 元素来修改:

  <cache
    eviction="FIFO"//回收策略
    flushInterval="60000"//刷新间隔
    size="512"//引用数目
    readOnly="true"//只读
  />

以上表明首先创建了一个先进先出策略的缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。

可用的收回策略有:
  • LRU – 最近最少使用的:移除最长时间不被使用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
  • WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
    默认的是LRU。

属性flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。

属性size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024。

属性readOnly(只读)属性可以被设置为true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此默认是false。

<select />标签中关于缓存的使用
属性

flushCache:将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false。
useCache:将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true。如果设置为false,那么即使启用了<cache />该条select的结构也不会被二级缓存。

二:下面结合springMVC+mybatis+mysql实际检验


mybatis缓存机制.png

装饰者模式

装饰者模式在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装类的对象,也就是装饰来包裹真实的对象。

装饰者模式
  • 执行main()方法
public class Go {

    public static void main(String[] args) {

        System.out.println("套餐菜单\n");

        EggsNoodles eggsNoodles = new EggsNoodles();
        eggsNoodles.noodNameAndPrice();

        DecoratorNoodles decoratorNoodles = new BeefNoodles(eggsNoodles);
        decoratorNoodles.noodNameAndPrice();

        DecoratorNoodles decoratorNoodles1 = new AubergineNoodles(eggsNoodles);
        decoratorNoodles1.noodNameAndPrice();

        DecoratorNoodles decoratorNoodles2 = new AubergineNoodles(decoratorNoodles);
        decoratorNoodles2.noodNameAndPrice();
    }
}
运行结果

六:mybatis cache作用


mybatis cache 提供查询缓存,用于减轻数据库压力,提高数据库性能。快速响应用户请求,改善用户体验。适用于各种频繁查询数据且查询条件不是十分复杂的业务。

需要源码请留下邮箱

参考官方文档:
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping

相关文章

网友评论

      本文标题:mybatis 二级cache

      本文链接:https://www.haomeiwen.com/subject/lgcgsttx.html