我用Ehcache本地缓存把查询性能提升100倍,真香

目录
  • 业务背景
  • 如何通过缓存优化查询接口
  • 基于大数据离线平台进行缓存预热
  • 本地缓存框架Ehcache

今天给大家来分享一个知识,那就是平时我们开发系统的时候,如何运用Ehcache这款本地缓存框架,把我们的查询性能大幅度提升优化,甚至让很多查询操作性能提升到100倍以上,下面就来讲讲这个话题。

业务场景

首先给大家引入一个场景,就是假设咱们写的一套Java系统要跑一个几百行的大SQL从mysql里查询数据,这个查询是不是会速度非常的慢?那肯定是了,这种几百行大SQL往往都是那种超级复杂的查询,可能涉及到了多表的关联,也有的是那种数据指标的查询,当然这种数据指标的查询其实是会常见一些,就是针对各种数据表关联起来查询和统计一些指标。

一般来说的话,遇到这种超级大SQL,往往会导致查询mysql性能很差,一般跑个1s甚至好几秒那是很常见的了,比如下图。

image.png
所以 往往对于这种场景来说,如果想要优化一下这个查询的性能,我们一般会用缓存,也就是说,这一次用几百行SQL语句查询出了结果,好不容易用了几秒钟特别特别慢,接着其实就把这个结果缓存起来,下次请求过来,直接就用这个缓存里的数据拿出来返回就可以了,从缓存里读结果以及返回,最多就是个1ms的事儿,根本不用几秒那么漫长了。

如何通过缓存优化查询接口

那么问题来了,这个缓存的结果是放哪里?可能很多兄弟说可以放redis里啊!但是,一定要每次用缓存就立马上redis吗?毕竟redis还得额外部署集群,一旦引入redis,你还得考虑redis是否会有故障,他的一些接入问题,以及跟redis进行网络通信毕竟也是要耗时的。

所以说,其实咱们优先啊,可以先上本地缓存,也就是说,在业务系统运行的jvm的堆内存里,来缓存我们的查询结果,下次请求来了,就从本地缓存里取出来直接返回就可以了,如下图。

image.png

基于大数据离线平台进行缓存预热

那么下一个问题又来了,很多查询他可能当天第一次查的时候,本地缓存里是没有的,还是得去mysql里花费几秒钟来查询,查完了以后才能放入到本地缓存里去,那这样岂不是每天都有一些人第一次查询很慢很慢吗?

有没有更好的办法呢?当然有了,那就是缓存预热,我们的业务系统可以把每天的查询请求和参数都记录下来,对于一些数据报表的复杂查询,其实每天的查询条件都是差不多的,只不过是当天的日期会有变化而已,另外就是对于一些数据报表的数据,往往是通过大数据平台进行离线计算的。

啥叫做离线计算呢࿱

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值