这里还有一个很容易被忽视的重要问题,即打开查询缓存以后,即使是list方法也可能遇到1+N的问题!相同条件第一次list的时候,因为查询缓存中找不到,不管class缓存是否存在数据,总是发送一条sql语句到数据库获取全部数据,然后填充查询缓存和class缓存。但是第二次执行的时候,问题就来了,如果你的class缓存的超时时间比较短,现在class缓存都超时了,但是查询缓存还在,那么list方法在获取id串以后,将会一个一个去数据库load!因此,class缓存的超时时间一定不能短于查询缓存设置的超时时间!如果还设置了发呆时间的话,保证class缓存的发呆时间也大于查询的缓存的生存时间。这里还有其他情况,比如class缓存被程序强制evict了,这种情况就请自己注意了。
查询缓存注意事项:非常慎用
1.查询条件不一样,缓存实体不一样。
2.二级缓存到了超时时间(时间段),会出现N+1问题。
3.如果查询记录大于maxElementsInMemory,而设置overflowToDisk="false"时,出现N+1问题。
4.使用了evict,会出现N+1问题。
分享到:
相关推荐
Hibernate一级缓存、二级缓存以及查询缓存实例
PHP查询缓存
1、缓存问题解决方案 1、缓存空数据 2、BloomFilter(布隆过滤器):在缓存之前再加一道屏障,里面存储目前redis数据库中存在的所有 1、互斥锁 2
MySQL的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,因此MySQL的查询缓存命中率很低,另一方面,对于大结果集的查询,其查询结果可以从cache中直接读取,有效的提升...
本代码通过使用spring aop+ehcache的技术,实现了方法级别的查询缓存,主要原理是 方法的完整路径+方法参数值,作为key,放入cache中,下次访问时先判断cache中是否有该key.
7:Hibernate查询缓存Query Cache及实现
NULL 博文链接:https://cdxs2.iteye.com/blog/1936594
而查询缓存是语义缓存的一种,在 SQL解析与查询执行之间,通过研究查询缓存的自主管理来提高数据库的查询性能。首先介绍了数据库常用的语义缓存与自主计算,然后对查询缓存进行了形式化定义,并提出了自适应的查询...
深入理解hibernate的缓存问题和配置,提高使用hibernate的效率
hibernate查询缓存1
mysql缓存查询和设置global_query_cache_size
在java开发中如何解决缓存雪崩的问题,因为缓存失效导致数据未加载到缓存中,或者缓存同一时间大面积的失效 从而导致所有请求都去查询数据库,导致数据库CPU和内存负载过高,甚至宕机
提高MySql查询性能 - 打开和设置查询缓存 视频教程 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等等好多知识
在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果。 如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。 注意:查询缓存绝不返回过期...
您可能感兴趣的文章:MySQL优化之缓存优化mysql的查询缓存说明使用Memcache缓存mysql数据库操作的原理和缓存过程浅析浅析MySQL内存的使用说明(全局缓存+线程缓存)MySQL高速缓存启动方法及参数详解(query_cache_...
最快查询缓存Jedis配置
动态页缓存插件解决动态页反复查询数据库对服务器造成压力的问题。第一次访问时会生成一个静态缓存文件,第二次访问若在缓存有效时间内,则读取静态缓存文件。本插件理论上可以用于所有动态页面的缓存。每个动态页...