`
aa87963014
  • 浏览: 154421 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

FreyjaJdbcTemplate 缓存失败了

 
阅读更多

事情不能总是一帆风顺,挣扎了一阵子我宣布freyja缓存特性添加失败。

 

查询缓存本身就是一个很可笑的事情,缓存不是数据库。面对错中复杂的sql很难维护缓存,查询缓存还是需要根据业务来做,否则完全是浪费时间而且效率低下。

 

no update成了大话,sql的结构太复杂了。

原本想实现no update。就是update(Object)的时候什么都不去做。这么一来缓存中的值为最新。数据库中的值就和缓存中的不同步。

然后问题集中在查询上面:最终的结果集=数据库集+缓存集。而且因为数据库集部分结果需要与缓存中的结果同步。然后同步之后的最终结果才是正确的值。问题是sql实在是太复杂,校验缓存中的结果太难。当然如果是单表这种简单的查询还是可以做的。如果想实现no update。

 

就必须把sql拆分为单个的简单sql。其实这个是可行的。例如:

select u.* from user u left join hero h on u.uid = h.userId where u.name = '1' and h.level > 10

 

 

这个sql就应该拆为:

 

List = select * from hero where level > 10 一个结果集

 

 

for(Hero hero:list){

 

 select * from user where name = '1' and userId = hero.userId

 

}

 

 

类似这样 复杂的sql结果变为了简单的结果。然后针对每段这种简单结果进行“最终的结果集=数据库集+缓存集。”这种合并,可见这样是多么的复杂。由这样的复杂计算带来的好处是no update值不值?

 

 

 

 

 

不过对于简单的查询缓存 如单表查询还是可以加一加的。

 

我了个去,这么一来好像和hibernate没有什么区别了。而且freyja还需要山寨一个hibernate的三态,不然在用到实体关联的时候要么update的时候效率低点,要么单独update。

 

难道优点只剩下HQl部分和缓存唯一2个方面了?

 

 

山寨三态刻不容缓,查询缓存再说。

 

其实我再想有没必要搞这种sql:

 

select * from Hero h left join UserInfo i on h.user.uid = i.user.uid where h.user.name = 'a' and h.level > 1

1
3
分享到:
评论

相关推荐

    详解CentOS8更换yum源后出现同步仓库缓存失败的问题

    主要介绍了详解CentOS8更换yum源后出现同步仓库缓存失败的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    geoserver gwc缓存的生成与失效

    Geoserver GWC 缓存的生成与失效 Geoserver 是一个基于开源的 GIS 服务器,可以提供强大的地图服务功能。其中,GWC(GeoWebCache)是 Geoserver 中的一个重要组件,负责生成和管理地图缓存。缓存的生成和失效是 GWC...

    浏览器缓存机制介绍与缓存策略剖析.pptx

    浏览器缓存机制介绍与缓存策略剖析 浏览器缓存机制是指浏览器在请求资源时,对已经请求过的资源进行缓存,以便下次请求时可以直接从缓存中获取,从而提高页面加载速度和减少服务器的压力。本文将详细介绍浏览器缓存...

    面试中缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级怎么解答?.docx

    在面试中,对于缓存相关的知识点,面试官可能会考察你对缓存雪崩、缓存穿透、缓存预热、缓存更新以及缓存降级的理解和处理策略。以下是这些概念的详细解释: 1. **缓存雪崩** 缓存雪崩是指大量缓存在同一时刻过期...

    插入U盘出现写入缓存失败的处理方法.docx

    标题和描述中提到的问题是关于U盘在使用过程中出现“写入缓存失败”的现象,导致数据传输缓慢或无法正常操作。这个问题可能是由于多种原因引起的,包括USB线质量不佳、U盘自身读写能力不足或者Windows系统的缓存策略...

    深入理解MyBatis中的一级缓存与二级缓存

    "深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...

    本地缓存与分布式缓存优缺点,使用

    本地缓存与分布式缓存优缺点、使用场景 缓存是计算机系统中的一种优化技术,通过将频繁访问的数据存储在内存中,以减少对外部存储设备的访问次数,提高系统的响应速度和性能。本文将详细介绍本地缓存与分布式缓存的...

    spring简单的缓存

    在IT行业中,缓存是一种非常重要的技术,它能够提高应用程序的性能和响应速度,通过将经常访问的数据存储在快速访问的内存中,避免了频繁的数据库查询或计算。本示例将聚焦于“Spring简单的缓存”实现,帮助开发者...

    缓存、缓存算法和缓存框架简介.docx

    在 IT 领域,缓存是一种重要的技术,用于提高应用程序的性能和响应速度。缓存的基本原理是将常用数据存储在高速、接近计算单元的地方,以便快速访问,减少对慢速存储(如硬盘或网络)的依赖。本文将深入探讨缓存、...

    hibernate一级缓存和二级缓存的区别与联系

    Hibernate 是一个流行的对象关系映射(ORM)框架,它提供了数据缓存机制以优化数据库访问性能。缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存...

    hibernate一级缓存、二级缓存和查询缓存

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...

    缓存、缓存算法和缓存框架简介 - 文章 - 伯乐在线.pdf

    缓存是一种存储技术,它将频繁使用或近期可能需要的数据临时存储在速度较快、访问成本较低的地方,以便快速读取,减少对原始数据存储(如数据库)的直接访问压力。缓存能够提升数据检索效率,因为从缓存中读取数据...

    JSP 页面缓存以及清除缓存

    ### JSP 页面缓存及其清除方法详解 #### 一、JSP页面缓存的重要性与应用场景 JSP(Java Server Pages)技术是一种结合了HTML、XML和Java编程的技术,用于创建动态网页。在JSP开发中,页面缓存是一种常用的技术手段...

    asp.net缓存 缓存

    ASP.NET缓存是微软开发的Web应用程序框架中的一个重要特性,用于提高网站性能和减少服务器负载。缓存技术在.NET框架中扮演着至关重要的角色,它能够存储数据以便快速访问,从而减少对数据库或其他慢速资源的依赖。在...

    geoserver配置图层缓存

    本篇文章将深入探讨如何在Geoserver中配置图层缓存,以及缓存对性能的影响。 一、图层缓存的重要性 图层缓存是Geoserver优化性能的关键机制之一。当用户请求地图时,Geoserver会预先渲染图层并将其存储在硬盘上,...

    Loadrunner负载测试 浏览器缓存设置

    2. **启用缓存**:相反,如果要模拟有缓存的情况,可以使用`web_cache_enable()`函数开启缓存,并通过`web_cache_control()`来控制缓存策略。例如,可以设置`web_cache_control("cache", "on")`来开启缓存,并通过`...

    webapi接口缓存组件

    WebAPI接口缓存组件是一种优化WebAPI服务性能的技术,它通过存储先前请求的响应结果,减少不必要的数据库查询或计算,从而提高系统响应速度。本文将详细介绍这个自定义的WebAPI接口缓存组件的设计原理、实现方式及其...

    springboot缓存一致性解决

    在Spring Boot应用中,缓存一致性是一个重要的议题,特别是在分布式系统中,多个节点可能同时访问并更新同一数据,导致缓存中的数据不一致。本文将深入探讨Spring Boot中如何处理和解决缓存一致性问题。 首先,我们...

    java map 实现缓存技术

    7. **缓存击穿与缓存雪崩**:处理大量并发请求同时导致缓存失效(击穿)或整个缓存服务崩溃(雪崩)的问题,可以通过加锁、使用分布式锁、预热缓存等方式解决。 8. **监控与统计**:为了优化缓存性能,需要收集和...

Global site tag (gtag.js) - Google Analytics