如何使用mybatis的mybatis二级缓存redis

MyBatis关于二级缓存问题
作者:wanna
字体:[ ] 类型:转载 时间:
本篇文章主要介绍了MyBatis关于二级缓存问题,二级缓存是Mapper级别的缓存,多个sqlSession操作同一个Mapper,其二级缓存是可以共享的。
MyBatis提供一级缓存和二级缓存,其中一级缓存是sqlSession级别的缓存,不同的sqlSession之间的缓存互不影响。二级缓存是Mapper级别的缓存,多个sqlSession操作同一个Mapper,其二级缓存是可以共享的。
MyBatis有多种二级缓存方案可供选择。其中对Memcached的支持较为成熟,现以Memcached为例介绍与spring项目的集成。
配置pom.xml,添加依赖。
&dependencies&
&dependency&
&groupId&org.mybatis.caches&/groupId&
&artifactId&mybatis-memcached&/artifactId&
&version&1.0.0&/version&
&/dependency&
&/dependencies&
&settings&
&setting name="cacheEnabled" value="true"/&
&/settings&
配置需要缓存的mapper.xml
二级缓存是Mapper级别的,可以针对具体的mapper.xml开启二级缓存。
&mapper namespace="org.acme.FooMapper"&
&cache type="org.mybatis.caches.memcached.MemcachedCache" /&
开启后,则mapper中所有的select语句默认都将被缓存,此命名空间下所有insert、update、delete语句将会导致空间下的缓存被清空。
可以针对具体某条语句禁用缓存。
&select id="retObj" resultMap="results" useCache="false" &
select id, name, sex from employee
也可针对某条语句触发刷新动作(默认对应所有插入、更新、删除语句)。
&select id="retObj" resultMap="results" flushCache="true" &
select id, name, sex from employee
配置参数在memcached.properties中设置,如果缺失则使用缺省设置。
以下是配置参数:
如果需要记录cache操作日志,可由如下配置实现
&mapper namespace="org.acme.FooMapper"&
&cache type="org.mybatis.caches.memcached.LoggingMemcachedCache" /&
缓存在Memcached中的类需要实现Serializable接口,否则会报错java.io.NotSerializableException。
二级缓存应用场景
对查询频率高,变化频率低的数据建议使用二级缓存。
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。
实现方法如下:
通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。
mybatis局限性
mybatis二级缓存对细粒度的数据级别的缓存实现不好。
比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Mybatis 相关概念 二级缓存 | 基于实例代码分步讲解 一站式学习Java |
Mybatis二级缓存是SessionFactory,如果两次查询基于同一个SessionFactory,那么就从二级缓存中取数据,而不用到数据库里去取了。
老规矩,先下载右上角的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。
对知识点进行改造,以支持二级缓存
11行新增一个段配置,以支持二级缓存&setting name=&cacheEnabled& value=&true&/&
&?xml version=&1.0& encoding=&UTF-8& ?&
&!DOCTYPE configuration
PUBLIC &-//mybatis.org//DTD Config 3.0//EN&
&http://mybatis.org/dtd/mybatis-3-config.dtd&&
&configuration&
&settings&
&!-- 打开延迟加载的开关 --&
&setting name=&lazyLoadingEnabled& value=&true& /&
&!-- 将积极加载改为消息加载即按需加载 --&
&setting name=&aggressiveLazyLoading& value=&false&/&
&setting name=&cacheEnabled& value=&true&/&
&/settings&
&typeAliases&
&package name=&com.how2java.pojo&/&
&/typeAliases&
&environments default=&development&&
&environment id=&development&&
&transactionManager type=&JDBC&/&
&dataSource type=&POOLED&&
&property name=&driver& value=&com.mysql.jdbc.Driver&/&
&property name=&url& value=&jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8&/&
&property name=&username& value=&root&/&
&property name=&password& value=&admin&/&
&/dataSource&
&/environment&
&/environments&
&mapper resource=&com/how2java/pojo/Category.xml&/&
&mapper class=&com.how2java.mapper.CategoryMapper&/&
&mapper class=&com.how2java.mapper.ProductMapper&/&
&/mappers&
&/configuration&
第7行新增&cache/&以启动对Category对象的二级缓存
&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE mapper
PUBLIC &-//mybatis.org//DTD Mapper 3.0//EN&
&http://mybatis.org/dtd/mybatis-3-mapper.dtd&&
&mapper namespace=&com.how2java.pojo&&
&insert id=&addCategory& parameterType=&Category& &
insert into category_ ( name ) values (#{name})
&delete id=&deleteCategory& parameterType=&Category& &
delete from category_ where id= #{id}
&select id=&getCategory& parameterType=&_int& resultType=&Category&&
select * from
where id= #{id}
&update id=&updateCategory& parameterType=&Category& &
update category_ set name=#{name} where id=#{id}
&select id=&listCategory& resultType=&Category&&
select * from
&if test=&start!=null and count!=null&&
limit #{start},#{count}
让Category 实现序列化接口
package com.how2java.
import java.io.S
import java.util.L
public class Category implements Serializable{
List&Product&
public int getId() {
public void setId(int id) {
public String getName() {
public void setName(String name) {
this.name =
public List&Product& getProducts() {
public void setProducts(List&Product& products) {
this.products =
public String toString() {
return &Category [id=& + id + &, name=& + name + &]&;
再次运行TestMybatis,如图所示,在同一个SessionFactory下查询id=1的数据,只有第一次需要执行sql语句,以后都是从缓存中取出
把你的代码复制到下面区域。 如果在线比较不好用,请使用客户端比较软件:
代码高亮插件双击即可选中,不过部分同学反应,通过代码高亮插件复制的代码无法在IDEA里正常显示,这里提供TEXTAREA的方式,方便复制,谢谢
根据练习目标尽量自己实现代码效果,期间会碰到疑问,难题,和自己不懂的地方,这些都是必要的过程
完成过程中,碰到无法解决的问题,带着疑问,查看答案,分析答案的解决思路
依然有不明白的地方,点开视频讲解,带着疑问,听视频讲解有问题的部分
理解后,再从头做一遍,把有疑问的地方都捋清楚
最后再总结一边,总结思路,总结解决办法,以后遇到类似的问题,怎么处理
把这时的想法,思路,研究都记录下来,等全部学完了,再回过头来巩固和理解,学习效果就会很好,知识点掌握得也牢固
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
答案时间:
请至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到
提问之前请
归校在即,收心学习,全场五折,优惠码:GOODSTUDY
可用于全站通
有效期8.29- 8.3101:47 提问
Mybatis的一级缓存、二级缓存是什么?分别有什么特点?
刚学习了MyBatis,所以不太懂。请大神、好人指点,能详细点就更好,谢谢。
按赞数排序
一级缓存基于sqlSession默认开启,在操作数据库时需要构造SqlSession对象,在对象中有一个HashMap用于存储缓存数据。不同的SqlSession之间的缓存数据区域是互相不影响的。
一级缓存的作用域是SqlSession范围的,当在同一个sqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存),
第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。
需要注意的是,如果SqlSession执行了DML操作(增删改),并且提交到数据库,MyBatis则会清空SqlSession中的一级缓存,这样做的目的是为了保证缓存中存储的是最新的信息,避免出现脏读现象。
当一个SqlSession结束后该SqlSession中的一级缓存也就不存在了。
关闭一级缓存后,再次访问,需要再次获取一级缓存,然后才能查找数据,否则会抛出异常。
二级缓存是mapper级别的缓存。使用二级缓存时,多个SqlSession使用同一个Mapper的sql语句去操作数据库,得到的数据会存在二级缓存区域,它同样是使用HashMap进行数据存储。相比一级缓存SqlSession,二级缓存的范围更大,多个Sqlsession可以共用二级缓存,二级缓存是跨SqlSession的。
二级缓存的作用域是mapper的同一个namespace。不同的sqlSession两次执行相同的namespace下的sql语句,且向sql中传递的参数也相同,即最终执行相同的sql语句,则第一次执行完毕会将数据库中查询的数据写到缓存,第二次查询会从缓存中获取数据,不再去底层数据库查询,从而提高效率。
在MyBatis配置文件(mybatis-config.xml)中开启二级缓存
//value属性默认为false
在**Mapper.xml中开启当前mapper的namespace下的二级缓存
代表创建了一个LRU缓存,并每隔60秒刷新,最大存储512个对象,而且返回的对象被认为是只读的。
evicition收回策略,默认是LRU
(1)LRU最近最少使用策略,一处做长时间不被使用的对象。
(2)FIFO先进先出策略,按对象进入缓存的顺序来移除它们。
(3)SOFT软引用策略,移除基于垃圾回收器状态和软引用规则的对象。
(4)WEAK弱引用策略,更积极地移除基于垃圾收集器状态和弱引用规则的对象。
其他相关推荐
其他相似问题44.查询缓存(二级缓存 - 二级缓存测试)【SpringMVC+Mybatis由浅入深全套视频教程】
- 爱酷学习网,免费高清视频教程在线观看
44.查询缓存(二级缓存 - 二级缓存测试)
距离广告结束还有
强调下越来越多的企业开始选择SpringMVC+Mybatis来构建系统架构,在电商热门的今天,SpringMVC+Mybatis已成为电商项目架构的最佳搭配。SpringMVC和Struts2都属于表现层的框架,SpringMVC是Spring框架的一部分,较于Struts2框架使用的更加广泛;Mybatis和Hibernate都属于持久层的框架,Mybatis是对JDBC操作数据库的的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等JDBC繁杂的过程代码。本视频首先由浅入深的讲解了SpringMVC与Mybatis的原理,然后分别结合实际案例教你如何使用这两个框架,最后将SpringMVC、Mybatis以及Spring框架进行整合完成实际项目的某些具体功能。视频内容丰富,讲解清晰易懂,对源码的剖析让你对框架的理解不仅知其然更知其所以然。
Album Info
请输入正确的邮件(格式:xxx@xxx.xx)
必须填本条信息!【图片】java权限框架 SpringMVC_mybatis or hibernate+ ehcache二级缓存【spring吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:11,787贴子:
java权限框架 SpringMVC_mybatis or hibernate+ ehcache二级缓存收藏
A 代码生成器(开发利器);
B 阿里数据库连接池 C 安全权限框架 D ehcache 自定义二级缓存 (后续会加入Activiti5 工作流 )系统为主流的 springmvc+mybaits 3.2 版本 ,提供maven的pom.xml文件,另免费赠送hibernate版本一套(垮数据库) 1. 有 oracle 、msyql、spring3.0、spring4.0
一共 4 套版本全部提供没有打jar没有加密的源代码(最下面截图2.1版本) 2. 支持APP手机应用(android和ios)接口调用 ,传输验证可用 shiro 的 MD5、SHA 等加密 3. 全新高大尚HTML5+css3.0+bootstrap响应式开发界面UI,美观漂亮时尚、前沿 4. 框架搭建完善,在此基础上做过很多项目,身经百战,支持大并发,程序运行稳定。 5. 基础功能已经完善,此为框架平台,需要程序员二次开发做具体的项目 6. 集成代码生成器,将大大提高开发效率,从此不再当码农,不再写搬砖代码,生成的模块直接可以运行 7. 增删改查的处理类,service层,mybatis的xml,SQL( mysql
和oracle)脚本,
jsp页面 将瞬间生成 8. 数据库连接池
阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势 9. 加入安全框架 shiro ,更安全,更可靠 10.加入tab标签页面功能,标签自由切换,不重复操作数据库
系统模块 1. 组织管理:角色管理,分角色组和成员,有组权限和成员权限。
2. 系统用户:对各个基本的组会员增删改查,单发、群发邮件短信,导入导出excel表格,批量删除
3. 会员管理:对前台用户管理,分配会员级别,到期时间,状态,联系信息等资料
4. 菜单管理:增删改查菜单 ztree(自定义菜单)业务菜单和系统菜单分离
5. 数据字典:无限级别,支持多级别无限分类。内设编号,排序等
6. 系统设置:修改系统名称,邮件服务器配置,短信账号设置,分页条数配置
7. 代码生成:打开代码生成器模块
8. 图库管理:对批量上传的图片统一管理
9. 性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等 -------------------------------------------------------------------------------------------------------------------------菜单权限:分配给每个角色不同的菜单权限, 每个角色看到的菜单不同按钮权限:独立分配不同的角色不同的功能权限,增删改查权限分配具体到不同的菜单支持多用户分权限管理后台,
权限具体到按钮 -------------------------------------------------------------------------------------------------------------------------信息模块(赠送)新闻管理:新闻的维护、发布、权重排序等 采用百度ueditor富文本框公告管理:公告的维护、发布广告管理:广告的维护、发布,状态维护,上传广告图片友情链接:友情链接的维护、状态维护特别推荐:特别推荐、状态维护-------------------------------------------------------------------------------------------------------------------------技术点1. 导出 导入 excel 文件2
导出word文件3. IO 流上传下载文件4. 群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件)5. 群发or单独 发送短信,支持两种第三方短信商接口6. spring
事物处理7. 代码生成器 (freemarker), 代码 zip 压缩打包8. MD5加密 SHA加密(登录密码用此加密)9. 数据库连接池
阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发10.加入安全框架 shiro (登录授权)(session管理)11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名)12.app接口(支持与其它语言数据交互)12.极光推送 (推送给APP及时消息,APP不启动也能收到)14.微信接口(微信接口验证,文本回复,图文回复等)15.java定时器 (定时执行某程序,精确到秒,可设置周期)16.Base64传输图片17.图片加水印(图片水印,文字水印18.生成 or
解析 二维码19.HTML5 + JAVAEE
WebSocket 通信技术20.批量异步上传图片,可预览,有进度条,支持拖拽上传(百度webuploader )。列表动态滑动放大展示。21.ehcache 自定义二级缓存 ,选择缓存存放目录,处理并发,增加系统性能 -------------------------------------------------------------------------------------------------------------------------信誉qq:
, -------------------------------------------------------------------------------------------------------------------------让您的选择的理由:1.新手来学习用
模仿代码做一遍增删改查,研究下功能模块,学习下编程思路,会进步很快,少走弯路。
并且本人提供代码以外的技术上的力所能及的帮助指导2.公司来自己用
市面上买套UI也不低于99块钱,轻则上万。即使买来UI,还得费时费力的让员工开发出基础模块
搭建起完善的框架,不如99块钱一步搞定, 节约的成本你自己算3.高手大神来干私活用
自己整套UI搭建起来也不会很短时间,最快最也得快得一天吧
公司加个班一小时也不少于50块钱呢4.外行人凑热闹-------------------------------------------------------------------------------------------------------------------------实物截图如下 登录界面背景用HTML5特效自动切换(百叶窗,幕布等多种切换方式)
代码生成器【送此框架小项目代码】
spring,亚马逊网上书城,满59元免运费,好书不间断!700多万种中外正版精品图书一网打尽!买spring,就上Z.CN!正版图书,天天低价特惠,让您挚爱阅读!
阿里数据库连接池druid
spring「京东」精选新书,热书,种类齐全,天天低价,货到付款,任你选&购&!时间有限,知识无限,京选好书-spring,做一个读书,爱书,藏书的人!
有代码生成器
的家里人生日快乐
来咯不吐看看咯
客气去玩啦的离开我咋的
不断更新,全部源码,最新技术,代码生成器,即时通讯
考虑我就去嗯也可以咋了
后台框架,全部源码,适合二次开发,安全权限
代码生成器,数据库连接池,安全权限框架
楼主,能分享源码吗?
主流,数据库连接池,安全,自定义二级缓存,各种版本
二级缓存,安全权限框架,自定义,数据库连接池
登录百度帐号推荐应用}

我要回帖

更多关于 mybatis的一二级缓存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信