使用redis做mybaties的二级缓存(2)-Mybatis 二级缓存小心使用

Mybatis默认对二级缓存是关闭的,一级缓存默认开启;

下面就说说为什么使用二级缓存需要注意:

二级缓存是建立在同一个namespace下的,如果对表的操作查询可能有多个namespace,那么得到的数据就是错误的。

举个简单的例子,订单和订单详情,orderMapper、orderDetailMapper、在查询订单详情时我们需要把订单信息也查询出来,那么这个订单详情的信息被二级缓存在orderDetailMapper的namespace中,这个时候有人要修改订单的基本信息,那就是在orderMapper的namespace下修改,他是不会影响到orderDetailMapper的缓存的,那么你再次查找订单详情时,拿到的是缓存的数据,这个数据其实已经是过时的。

根据以上,想要使用二级缓存时需要想好两个问题:

1)对该表的操作与查询都在同一个namespace下,其他的namespace如果有操作,就会发生数据过时。

2)对关联表的查询,关联的所有表的操作都必须在同一个namespace。

总之,操作与查询在同一个namespace下的查询才能缓存,其他namespace下的查询都可能出现问题。

所以对单表单工作空间要注意使用

e

时间: 2024-07-31 06:42:08

使用redis做mybaties的二级缓存(2)-Mybatis 二级缓存小心使用的相关文章

Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存

1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据库压力,提高数据库性能. mybatis提供一级缓存和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据.不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的. 二级缓存是mapper级别的缓存,多个sqlSession去操作同一个Mapper的sql语句,多个sqlSession可以共用二级缓存,二级缓存

mybatis查询缓存——(十三)

1.     mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据.不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的. 二级缓存是mapper级别的缓存,多个SqlSession去操作同一个

Mybatis一二级缓存的理解

频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相同的查询语句,完全可以把查询结果存储起来,下次查询同样的内容的时候直接从内存中获取数据即可,这样在某些场景下可以大大提升查询效率. MyBatis的缓存分为两种: 一级缓存,一级缓存是SqlSession级别的缓存,对于相同的查询,会从缓存中返回结果而不是查询数据库 二级缓存,二级缓存是Mapper级别的缓存,定义在Mapper

MyBatis 之 缓存

MyBatis 和 Hibernate 一样具有 一级缓存 和 二级缓存. 1.  一级缓存:MyBatis 一级缓存的作用域 是 同一个SqlSession. 写一个 查询 User 的例子:   <!-- user 查询 -->   <select id="findUserById" parameterType="int" resultType="user">    select * from users where 

使用Redis做MyBatis的二级缓存

1. 介绍 使用mybatis时可以使用二级缓存提高查询速度,进而改善用户体验. 使用redis做mybatis的二级缓存可是内存可控<如将单独的服务器部署出来用于二级缓存>,管理方便. 2. 使用思路 2.1 配置redis.xml 设置redis服务连接各参数 2.1 在配置文件中使用 <setting> 标签,设置开启二级缓存: 2.2 在mapper.xml 中使用<cache type="com.demo.RedisCacheClass" /&g

Spring整合Redis做数据缓存(Windows环境)

当我们一个项目的数据量很大的时候,就需要做一些缓存机制来减轻数据库的压力,提升应用程序的性能,对于java项目来说,最常用的缓存组件有Redis.Ehcache和Memcached. Ehcache是用java开发的缓存组件,和java结合良好,直接在jvm虚拟机中运行,不需要额外安装什么东西,效率也很高:但是由于和java结合的太紧密了,导致缓存共享麻烦,分布式集群应用不方便,所以比较适合单个部署的应用. Redis需要额外单独安装,是通过socket访问到缓存服务,效率比Ehcache低,但

springboot2.0+redis实现消息队列+redis做缓存+mysql

本博客仅供参考,本人实现没有问题. 1.环境 先安装redis.mysql 2.springboot2.0的项目搭建(请自行完成),本人是maven项目,因此只需配置,获取相应的jar包,配置贴出. <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifact

Redis做为单机缓存使用建议

Redis做为单机缓存使用建议 前言 由于原来项目使用的缓存中间件无法在国产麒麟操作系统里面使用,准备在项目中引入redis做为单机缓存. 配置优化建议 配置redis服务以守护进程启动 Redis默认不是以守护进程的方式运行,可以通过将配置项daemonize修改为yes,这样启动redis-server后会自动在后台运行. 安全配置 将bind配置为127.0.0.1可以避免redis受外部攻击.另外使用requirepass配置项,可以设置访问redis服务器数据时先要输入密码. 一个小遗

Yii框架下使用redis做缓存,读写分离

Yii框架中内置好几个缓存类,其中有memcache的类,但是没有redis缓存类,由于项目中需要做主从架构,所以扩展了一下: /** * FileName:RedisCluster * 配置说明 * 配置为1主多从 或者 1个独立的服务器 * 写往主的里面写 * 读是从从的里面读 * 'class'=>'RedisCache', * 'servers'=>array( * array( * 'host'=>'IP1', * 'port'=>'6380', * 'master'=&