MyBatis缓存Cache包
Mybatis默认使用了一级缓存为数据查询提供效率,其底层数据结构为PerpetualCache。同时MyBatis不止实现了PerpetualCache,还有其他实现提供其他功能,如下:
可以从UML图上看,除了PerpetualCache是Cache的具体实现,其他它是Cache的装饰器类(其特点是每个类自身有一个Cache接口的属性,即类本身装饰器自身)。
在Mybatis查询一二级的缓存中有介绍PerpetualCache这个实现类,本文中主要介绍Cache的其他装饰器类。
按功能分类,缓存装饰器类可以分为以下几类:
同步装饰器:为缓存增加同步功能,SynchronizedCache;
日志装饰器:为缓存增加日志功能,LoggingCache;
清理装饰器:为缓存中的数据增加清理功能,FifoCache,LruCache,WeakCache,SoftCache等;
阻塞装饰器:为缓存增加阻塞功能,BlockingCache;
定时清理装饰器:为缓存增加定时刷新功能, ScheduledCache;
系列化装饰器:为缓存增加序列化功能,SerialzedCache;
事务装饰器:用于支持事务操作,TransactionalCache。
这类装饰器缓存是如何组建的呢?在CacheBuilder类源码中可以得到答案:
从上图看,Mybatis默认使用了清理缓存LruCache。
MyBatis缓存Cache包的更多相关文章
- mybatis 缓存(cache)的使用
许多应用程序,为了提高性能而增加缓存, 特别是从数据库中获取的数据. 在默认情况下,mybatis 的一级缓存是默认开启的.类似于hibernate, 所谓一级缓存,也就是基于同一个sqlsessio ...
- MyBatis功能点一:二级缓存cache
对于Mybatis缓存分作用域等维度区别一.二级缓存特点如下图: 分析缓存源码首先得找到缓存操作的入口:前面已经分析,sqlsesion.close()仅对一级缓存有影响,而update等对一/二级缓 ...
- mybatis源码分析(7)-----缓存Cache(一级缓存,二级缓存)
写在前面 MyBatis 提供查询缓存,用于减轻数据库压力,提高数据库性能. MyBatis缓存分为一级缓存和二级缓存. 通过对于Executor 的设计.也可以发现MyBatis的缓存机制(采用模 ...
- mybatis 自定义缓存 cache
缓存不管哪个框架都是显得特别的重要,今天自己测试实现了mybatis自定义缓存,从而理解mybatis缓存的工作原理. 首先缓存类要实现Cache接口:具体实现如下package com.ibatis ...
- 使用MyBatis缓存
(1).为什么需要使用缓存:: MyBatis是一个持久层(数据库层)映射框架,在所有访问数据库的操作中,无疑数据查询是最耗费数据库资源的操作了,因为你一次可能需要查询成千上百万条记录(如果你不加限制 ...
- 带着新人学springboot的应用03(springboot+mybatis+缓存 下)
springboot+mybatis+缓存,基本的用法想必是会了,现在说一说内部大概的原理. 稍微提一下mybatis,只要导入了mybatis的依赖,那么有个自动配置类就会生效,你可以去mybati ...
- MyBatis学习总结(四)——MyBatis缓存与代码生成
一.MyBatis缓存 缓存可以提高系统性能,可以加快访问速度,减轻服务器压力,带来更好的用户体验.缓存用空间换时间,好的缓存是缓存命中率高的且数据量小的.缓存是一种非常重要的技术. 1.0.再次封装 ...
- 聊聊MyBatis缓存机制【美团-推荐】
聊聊MyBatis缓存机制 2018年01月19日 作者: 凯伦 文章链接 18778字 38分钟阅读 前言 MyBatis是常见的Java数据库访问层框架.在日常工作中,开发人员多数情况下是使用My ...
- Mybatis缓存(二)
Mybatis的二级缓存 1.二级缓存的范围 1. 二级缓存是Mapper级别的缓存. 2. 二级缓存的结构也是一个HashMap. 3. 不同的SqlSession对象去操作同一个mapper ...
随机推荐
- mybatis(1.2)
为什么执行sql语句后 数据库表中不会更新 需要我们手动配置 两种方法 如下: 1:调用SqlSession接口的commit方法 2:获取Session的时候 SqlSessionFactory ...
- 深入理解MySQL索引底层数据结构
作者:IT王小二 博客:https://itwxe.com MySQL 索引相关的数据结构有两种,一种是 B+tree,一种是 Hash,那么为什么在 99.99% 的情况下都使用的是 B+tree索 ...
- HDU 2018 母牛的故事 (递归入门)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018 思路分析: 问题分析:这道题的递推关系非常类似斐波那契数列,由题意不难得到以下函数递推式: 对于 ...
- 从头造轮子:python3 asyncio之 gather (3)
前言 书接上文:,本文造第三个轮子,也是asyncio包里面非常常用的一个函数gather 一.知识准备 ● 相对于前两个函数,gather的使用频率更高,因为它支持多个协程任务"同时&qu ...
- 《剑指offer》面试题65. 不用加减乘除做加法
问题描述 写一个函数,求两个整数之和,要求在函数体内不得使用 "+"."-"."*"."/" 四则运算符号. 示例: 输 ...
- C# 获取DPI例子
public static float GetDpiX() { System.Windows.Forms.Panel p = new System.Windows.Forms.Panel(); Sys ...
- deepin20体验
现在Ubuntu20吊打deepin20 100条街.撑了20天受不了deepin 优点 开机启动设置简单,即使不是应用商店的应用也很好 deepin仓库不用代理也很快.,而且有些Ubuntu下载不了 ...
- 利用SelectPdf插件将网页生成PDF
简介 适用于.NET Framework和.NET Core的HTML至PDF转换器 SelectPdf提供的在线html到pdf转换器使用.NET的Select.Pdf库中的html到pdf转换器. ...
- golang中结构体的嵌套、方法的继承、方法的重写
package main import "fmt" type human struct { name, phone string age int8 } type student s ...
- 前端基础之javaScript(函数)
目录 一:javaScript函数 1.函数关键字 2.格式 3.无参函数 4.有参函数 二:关键字arguments 1.能够获取函数接受的索引参数 2.关键字arguments(限制函数不能多也不 ...