博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql缓存
阅读量:5272 次
发布时间:2019-06-14

本文共 2169 字,大约阅读时间需要 7 分钟。

<cache/>

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

 

可用的收回策略有:
 
LRU – 最近最少使用的:移除最长时间不被使用的对象。
 
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
 
SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
 
WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
   默认的是 LRU。
自定义缓存
这个示例展示了如何使用一个自定义的缓存实现。 type 属性指定的类必须实现
org.mybatis.cache.Cache 接口
记得缓存配置和缓存实例是绑定在 SQL 映射文件的命名空间是很重要的。因此,所有
在相同命名空间的语句正如绑定的缓存一样。语句可以修改和缓存交互的方式,或在语句的
语句的基础上使用两种简单的属性来完全排除它们
因为那些是默认的,你明显不能明确地以这种方式来配置一条语句。相反,如果你想改
变默认的行为,只能设置 flushCache 和 useCache 属性。
cache-ref 元素来引用另外一个缓存。
*******************************************************************************************
mybatis 也有一级二级缓存
一级缓存的作用域时session级别,基于PerpetualCache的hashMap的本地缓存, 数据存储在session 中,当session fush或close后,
session中所有的信息将被清空
二级缓存与一级缓存的实现机制相同,也是基于PerpetualCache 的hashMao的本地缓存,但是其作用域是mapper(nameSpace)但是
可以自定义存储数据源,如Ehcache.
 
一级缓存是默认开启的,开启二级缓存需要在mapper.xml文件添加如下配置
示例: /*16 * 测试二级缓存17 * 使用两个不同的SqlSession对象去执行相同查询条件的查询,第二次查询时不会再发送SQL语句,而是直接从缓存中取出数据18 */19 @Test20 public void testCache2() {21 String statement = "me.gacl.mapping.userMapper.getUser";22 SqlSessionFactory factory = MyBatisUtil.getSqlSessionFactory();23 //开启两个不同的SqlSession24 SqlSession session1 = factory.openSession();25 SqlSession session2 = factory.openSession();26 //使用二级缓存时,User类必须实现一个Serializable接口===> User implements Serializable27 User user = session1.selectOne(statement, 1);28 session1.commit();//这个地方要commit(),因为二级缓存是在mapper.xml的cache中取的,不commit数据就不会存储到 mapper.xml文件中,也就取不到缓存29 System.out.println("user="+user);3031 //由于使用的是两个不同的SqlSession对象,所以即使查询条件相同,一级缓存也不会开启使用32 user = session2.selectOne(statement, 1);33 //session2.commit();34 System.out.println("user2="+user);35 }

 

转载于:https://www.cnblogs.com/zhangXingSheng/p/6222217.html

你可能感兴趣的文章
大四java实习生的一些经历
查看>>
线程池的概念
查看>>
Oracle_Statspack性能诊断工具
查看>>
转获取sql维护的表关系
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>