查询缓存

将上一次的查询结果保存在内存中,后面如果是相同的查询,就不再去数据库查询,到内存中获取数据。如果中间进行了增、删、改,需要清空缓存中的数据。

好处:

提高查询速度,减小数据库服务器压力

Mybatis中的查询缓存:

一级查询缓存

如果使用的是同一个SqlSession对象中【没有被关闭过close()】,执行了多次相同的查询语句,第一次查询后会将结果保存到内存中,后面相同的查询会从内存中直接获取数据,而不再去数据中查询,提高查询速度。

当一个SqlSession对象被关闭后,该SqlSession的上一次查询结果缓存中就不存在了。

Mybatis中一级缓存默认就是开启状态,不需要手动启动,而且不能够进行关闭。

一级缓存的验证:

用同一个SqlSession对象执行相同的方法,控制台只有一次查询

控制台

如果使用的不同的SqlSession对象,那么不使用缓存

如果使用的是同一个SqlSession对象,但是中间出现了增删改操作,缓存也不起作用

结果

二级查询缓存

二级缓存与一级缓存,一级缓存当SqlSession关闭,则缓存数据不再存在,二级缓存的缓存数据与SqlSession对象无关。二级缓存延长缓存数据的保存时间。

使用

对查询语句中涉及到的实体类必须实现序列化接口

在对应的映射文件中的mapper标签中添加cache子标签

验证二级缓存的作用

使用的是不同的SqlSession对象

执行结果

验证增删改对二级缓存的影响

二级缓存在有增删改的时候会自动清空缓存,到数据库查找。

原文地址:https://www.cnblogs.com/Tunan-Ki/p/11780115.html

时间: 2024-08-03 21:49:51

查询缓存的相关文章

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

mybatis查询缓存——(十三)

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

笔记:Hibernate 查询缓存

Hibernate 的一级缓存和二级缓存都是对实体进行缓存,他不会缓存普通属性,如果想对普通熟悉进行缓存,可以考虑使用查询缓存. 对于查询缓存来说,他缓存的Key就是查询所用的 HQL 或者 SQL 语句,查询缓存不仅要求使用的语句相同,还要求参数必须一致,查询缓存默认是关闭的,为了开启查询缓存,需要修改 Hibernate.cfg.xml 配置文件,增加如下配置: <property name="hibernate.cache.use_query_cache">true&

让EFCore更疯狂些的扩展类库(二):查询缓存、分部sql、表名替换的策略配置

前言 上一篇介绍了扩展类库的功能简介,通过json文件配置sql语句 和 sql语句的直接执行,这篇开始说明sql配置的策略模块:策略管理器与各种策略的配置. 类库源码:github:https://github.com/skigs/EFCoreExtend 引用类库:nuget:https://www.nuget.org/packages/EFCoreExtend/ PM> Install-Package EFCoreExtend 策略管理器功能简介 用于管理策略 与 策略执行器和调用(目前分

25Mybatis_查询缓存的基本知识

mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级和二级缓存的示意图: 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据.不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的.就是说每个sqlSession都有各自缓存. 二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句

详解MySQL查询缓存

查询缓存是指存储使用SELECT语法查询到的返回到客户端的文本.当相同的请求再次发生时,会从查询缓存中获取数据,而非再执行一遍查询.查询缓存是共享Session会话的,所以一个客户端的请求可能与另一个客户端的请求得到相同的结果. 当服务器频繁收到相同的请求而数据库中的表数据变化频率又不高,查询缓存是非常有用的,它可以大大提高应用程序的访问效率.很多Web服务器利用这一原理基于数据库的内容动态生成页面. 查询缓存并不会返回过期的数据,当数据库中的表数据发生变化时,相关的查询缓存会自动清除.但是查询

Mysql查询缓存碎片、缓存命中率及Nagios监控

Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STATUS LIKE 'qcache%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | Qcache_free_blocks | 5 |

MySQL查询缓存

一.查询缓存说明 MySQL Query Cache是用来缓存我们所执行的SELECT语句以及该语句的结果集,MySql在实现Query Cache的具体技术细节上类似典型的KV存储,就是将SELECT语句和该查询语句的结果集做了一个HASH映射并保存在一定的内存区域中.当客户端发起SQL查询时,Query Cache的查找逻辑是,先对SQL进行相应的权限验证,接着就通过Query Cache来查找结果(注意必须是完全相同,即使多一个空格或者大小写不 同都认为不同,即使完全相同的SQL,如果使用

hibernate 一级缓存,二级缓存,查询缓存

1.一级缓存是session级的缓存,session结束即事务提交,session关闭,缓存清除.效果不大 get方式:一个session内,第二次查询不连数据库.适用于一级缓存 load方式:懒加载查询(查询时不执行sql,使用结果时才会执行sql),第二次查询不连数据库.适用于一级缓存 createQuery(hql).list():查询了整个list,第一次调用list()时,执行sql.第二次查询时,又执行了sql,说明不使用一级缓存.也就是不使用二级缓存    createQuery(

mysql查询缓存打开、设置、参数查询、性能变量意思

http://blog.sina.com.cn/s/blog_75ad10100101by7j.html http://www.cnblogs.com/zemliu/archive/2013/08/03/3234372.html 第一: query_cache_type 使用查询缓存的方式 一般,我们会把 query_cache_type 设置为 ON,默认情况下应该是ON mysql> select @@query_cache_type;+--------------------+| @@qu