zoukankan      html  css  js  c++  java
  • MyBatis之二级缓存

     二级缓存与一级缓存区别:二级缓存的范围更大,多个sqlSession可以共享一个UserMapper的二级缓存区域。

    每一个mapper都有一个自己的二缓存区域(按namespace区分),两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同 的二级缓存区域中。

    二级缓存原理:

    开启二级缓存

    1. 只需要在你的Mapper映射文件中添加一行:  
    <cache /> 

    2.调用pojo类实现序列化接口

    若没有指定cache标签的属性值,将采用默认的行为进行缓存,即:

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

    cache标签的属性详解:

    题外话: 如果让我设计出一个缓存机制,我会从内部和外部分别考虑,内部:缓存容量,缓存更新机制(包含:回收策略 + 更新时间), 外部:是可读写,还是只读的; 因此,就不难理解,下面的属性设定了;

    eviction(指定可用的回收策略):

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

    flushInterval(刷新间隔)取值为任意的正整数,表示一时间段(注:60*60*1000这种形式是不允许的)。不设置默认情况是没有刷新间隔,即:缓存仅仅调用语句时刷新。 
    size(引用数目)取值为任意正整数,引用数目=缓存的对象数目+运行环境的可用内存资源数目。默认值是1024. 
    readOnly(只读)取值为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,有性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。有安全优势;默认是false。

    例如:

    <cache 
     eviction="FIFO"  
     flushInterval="10800000"  size="512" 
     readOnly="true"  

    /> 

    解读:这个更高级的配置创建了一个FIFO缓存,并每隔3个小时刷新缓存,储存结
    果对象或列表的512个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改他们会导致冲突。

    配置完<cache/>表示该mapper映射文件中,所有的select语句都将被缓存,所有的insert、update和delete语句都将刷新缓存。

     若希望有些select不想被缓存时,可以添加select的属性useCache=“false”;即:禁用当前select语句的二级缓存,即每次查询都会发出sql去查询; 

    若希望有些insert、update和delete不想让它刷新缓存时,添加属性flushCache=”false”。即:不执行刷新缓存;注意:注意如果会出现脏读,例如:使用缓存时如果手动修改数据库表中的查询数据会出现脏读。

    参考出处:

    http://blog.csdn.net/acmman/article/details/46793289

    http://www.cnblogs.com/OnlyCT/p/4792027.html

  • 相关阅读:
    【NumPy】 之常见运算(np.around、np.floor、np.ceil、np.where)(转)
    python3中collections模块(转)
    numpy.random模块用法小结
    生成模型和判别模型(《统计学习方法》截图)
    linux(Ubuntu)下机器学习/深度学习环境配置
    sklearn中predict_proba的用法例子(转)
    机器学习案例实战之信用卡欺诈检测——收获的技术
    分析长期治疗数据显示TNF拮抗剂似乎并未增加严重感染和肿瘤发生风险
    超声在鉴别诊断RA与PsA中的应用价值
    结合超声计数炎症关节的改良版DAS28的临床应用
  • 原文地址:https://www.cnblogs.com/zhaojinxin/p/6601683.html
Copyright © 2011-2022 走看看