`

缓存处理-浅处置

阅读更多
  
问题:一个查询sql,在连续两次调用此sql,会传递不同的参数。
不同的参数将导致两种查询结果。可是:在实际运行时 两次sql执行的结果一样。并且最后发现,最后一次的sql执行,并没有在数据库中执行。
表结构如下:
汉字 字段 类型
现金 xianjin double
汇率 huilv double

Select xianjin*huilv    from    a(此sql根据传值判断,是否应当乘以汇率)
正常的情况:
在第一调用时,此sql执行乘以汇率的sql。
在第二次调用时,此sql执行没有乘以汇率的sql。
问题为:两次的sql都是乘以汇率。


跟踪方法。通过JUNIT,将两次调用sql同时调用,发现执行的结果,确实存在问题。
1、查看hibernate 输出的sql日志:
执行的sql,确实不乘以日志。
获取数据库值是如下方法:
getSession().createSQLQuery(dongtaiSql).addEntity(
"XX", xx.class).list();
其中: getSession()为系统内共用内存。
public static Session getSession() {
//代码省略
}
2、跟踪oracle数据库执行sql
-------oracle 查看已经执行过的sql 这些是存在共享池中的 --------->
select * from v$sqlarea t order by t.LAST_ACTIVE_TIME desc
发现没有预期执行的sql在共享池中。


所以推断,此处出现的问题,与使用hibernate不熟练有关。
在dao方法中加了一个清除缓存的方法:
getSession().clear();

再次执行JUNIT测试用例,sql执行正常。

备注:
此问题还遗留了一个问题,此缓存的逻辑,暂时能力有限。
参考了下面的资源,还是不太了解,有能力时,在啃大骨头
http://www.iteye.com/problems/93406
hibernate清除缓存与自动提交的关系10

http://www.cnblogs.com/xiaoluo501395377/p/3377604.html
hibernate缓存机制详细分析

http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html
Hibernate 缓存机制
http://blog.csdn.net/an_2016/article/details/52088712
Hibernate之缓存详解
分享到:
评论

相关推荐

    ibatis缓存介绍 - 勇泽 - 博客园.mht

    ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园

    spring缓存机制-入门实例

    - 如果需要自定义缓存策略,可以通过实现`CacheResolver`、`KeyGenerator`和`CacheErrorHandler`接口来自定义缓存解析、键生成和错误处理。 5. **缓存穿透和缓存击穿问题**: - 缓存穿透是指查询一个不存在的数据...

    lixd#daily-notes#26-缓存异常-缓存雪崩-击穿-穿透1

    1. 概述 2. 缓存雪崩 3. 缓存击穿 4. 缓存穿透 5. 小结

    先锋缓存类-测试可用

    当我们谈论“先锋缓存类-测试可用”时,这通常是指一个特定的ASP(Active Server Pages)开发的缓存管理类库,它可以帮助优化asp页面的加载和处理速度。 在ASP编程中,缓存机制允许我们将频繁访问的数据存储在内存...

    缓存 ehcache-1.3.0.rar

    - 缓存是一种存储技术,用于暂时存储经常访问的数据,减少对主存储器或数据库的访问,以提高数据处理速度。Ehcache 使用内存和磁盘混合存储,兼顾速度与容量。 2. **Ehcache 结构** - Ehcache 由三个主要组件...

    spring缓存机制-自定义缓存(五, 六)

    除了自定义`CacheManager`外,我们还可以通过实现`CacheResolver`和`CacheErrorHandler`等接口来自定义缓存解析和错误处理策略。 1. `CacheResolver`:该接口负责在方法执行时解析应使用的缓存。你可以根据请求上...

    master-lin#DevOps-1#缓存穿透-缓存击穿-缓存雪崩1

    前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并

    缓存框架-ehcache架构图

    缓存框架-ehcache架构图

    安卓图片加载缓存相关-Android图片二级缓存.zip

    在Android应用开发中,图片加载和缓存是一个关键性能优化环节。这个压缩包"安卓图片加载缓存相关-Android图片二级缓存.zip"显然包含了关于如何实现高效图片加载和二级缓存的源码示例。这里我们将深入探讨图片加载...

    缓存框架-Ehcache学习笔记

    Ehcache 是一个广泛使用的开源 Java 缓存框架,它在处理大量数据的高性能应用中扮演着重要角色。Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速访问频繁使用的数据,从而提高整体...

    47-二级缓存 Hibernate-Shiro-MyBatis

    3. 编写自定义缓存实现,处理并发和过期策略。 4. 注意事务控制,确保在提交事务后,相关数据能够被正确更新到缓存中。 以上是对Hibernate、Shiro和MyBatis中二级缓存的概述和配置流程。理解并熟练掌握这些技术,...

    Spring基于注解的缓存配置--EHCache AND OSCache

    - 使用互斥锁处理并发请求,防止雪崩。 8. **最佳实践** - 缓存的大小和存活时间应根据业务需求调整。 - 对于更新频繁的数据,考虑使用异步更新策略。 - 使用合适的序列化机制,保证缓存数据的序列化和反序列化...

    Redis思维导图分布式缓存-基于Redis集群解决单机Redis存在的问题

    分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。分布式缓存-基于Redis集群解决单机Redis存在的问题。...

    分布式缓存--缓存与数据库强一致场景下的方案.doc

    总之,保证分布式缓存与数据库的强一致性是一项挑战,需要通过设计合理的数据同步策略和处理机制来平衡一致性、可用性和分区容忍性。上述方案提供了一种可能的实践路径,但实际应用中还需根据具体业务需求和系统性能...

    Spring基于注解的缓存配置--web应用实例

    因此,良好的缓存配置应包含适当的异常处理策略,以优雅地处理这些问题。 9. **缓存超时与过期策略** Spring Cache允许设置缓存项的过期时间,这样可以确保旧数据不会无限期地占用存储空间。这可以通过`...

    检验用户名、密码、字符编码、页面缓存----Filter的基本使用

    而在处理动态内容时,我们可能希望禁用缓存,以确保每次请求都能获取到最新的数据。在Filter中,我们可以根据URL路径或请求类型来判断是否添加缓存相关的HTTP响应头。 四、Filter的配置与链式处理 在Web应用的web....

    安卓图片加载缓存相关-Android-异步图片加载器.zip

    在Android开发中,图片加载和缓存是一个非常关键的环节,尤其在处理大量图片的应用中,如社交应用、电商应用等。"安卓图片加载缓存相关-Android-异步图片加载器.zip"这个压缩包中可能包含了一个实现异步图片加载和...

    安卓图片加载缓存相关-引用开源框架通过AsyncHttpClient实现网络图片查看器.rar

    总之,这个压缩包提供了一个学习和实践Android图片加载缓存机制的机会,通过对AsyncHttpClient的使用,开发者可以更高效地处理网络图片,提升应用性能和用户体验。同时,理解并掌握图片加载缓存策略对于任何Android...

    Android studio中图片异步加载并缓存Android-Universal-Image-Loader

    在Android应用开发中,图片加载是一项关键任务,尤其是在处理大量图片或者网络图片时。"Android-Universal-Image-Loader"(简称UIL)是一个强大的图片加载、缓存库,专为解决这个问题而设计。这个库提供了丰富的功能...

Global site tag (gtag.js) - Google Analytics