首页 > 其他分享 >Caffeine - 实际案例:为什么要引入Caffeine本地缓存

Caffeine - 实际案例:为什么要引入Caffeine本地缓存

时间:2023-02-27 17:46:52浏览次数:53  
标签:02 缓存 huatai 56 27T15 Caffeine ResourceServiceHandler 案例 faneDataService

问题背景

情景分析服务,老版本里会每次查询/翻页,均会重新请求一次。每次请求都会涉及到重新查询permission的工作。

permission信息,是scenarioService通过grpc调用faneDataService获得的。

然而发现,每次请求都很慢,大约6s。通过arthas发现,就是grpc请求那一步,消耗了98%的耗时导致的。

 

 

 

问题分析

scenario发送grpc请求的log:

 

 

faneDataService接收到grpc请求的log:

2023-02-27T15:56:25,765 [ForkJoinPool.commonPool-worker-6] INFO  com.huatai.quant.handler.ResourceServiceHandler - 收到resource查询请求: requestId: "xbridge-1-62178@168-63-70-238"2023-02-27T15:56:25,765 [ForkJoinPool.commonPool-worker-6] INFO  com.huatai.quant.handler.ResourceServiceHandler - 收到resource查询请求: requestId: "xbridge-1-62178@168-63-70-238"resourceType: "R_SCENARIO_DEF"appName: "ScenarioService"operateUserId: "xtryaozhongbing"

2023-02-27T15:56:25,810 [ForkJoinPool.commonPool-worker-6] INFO  com.huatai.quant.handler.ResourceServiceHandler - 完成对[ScenarioService,R_SCENARIO_DEF]资源节点原始数据查询:3938

2023-02-27T15:56:28,576 [ForkJoinPool.commonPool-worker-6] INFO  com.huatai.quant.handler.ResourceServiceHandler - 完成资源数据权限校验:权限校验后资源树列表: 39502023-02-27T15:56:28,576 [ForkJoinPool.commonPool-worker-6] INFO  com.huatai.quant.handler.ResourceServiceHandler - 生成resource查询响应: 39502023-02-27T15:56:28,577 [ForkJoinPool.commonPool-worker-6] INFO  com.huatai.quant.handler.ResourceServiceHandler - 调用grpc获取完整资源树:3950

 

详细解释:

  • 根据上方scenarioService截图:情景服务发起grpc调用faneDataService时间为:2023-02-27T15:56:24,810 
  • 根据上方faneDataService log:faneDataService收到请求的时间为:2023-02-27T15:56:25,765,网络损耗大约1s
  • faneDataService自身运行大约 3s(中间还牵扯到faneDataService调用其他服务)
  • faneDataService将响应返回给情景分析服务,网络预计损耗大约1s

大约能够解释耗时6s的原因。

 

引入Caffeine原因

由于scenarioService和faneDataService本身自己的逻辑处理,耗时都在预期之内。

叠加两个服务间通讯损耗也有2s,占比33%。

因此自身能控制的方面,调优范围较小。

 

因此引入本地缓存——caffeine,较能缓解重复查询的问题。

 

标签:02,缓存,huatai,56,27T15,Caffeine,ResourceServiceHandler,案例,faneDataService
From: https://www.cnblogs.com/frankcui/p/17160592.html

相关文章

  • Redis 缓存穿透,击穿,雪崩 并发 之 读写数据编码实战
     什么是缓存穿透  缓存穿透是指查询一个缓存中和数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空。当用户使用这条不存在的数据疯狂......
  • # yyds干货盘点 # 盘点一个ddddocr实现登录的实战案例
    大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个​​Pyhton​​网络爬虫的问题,这里拿出来给大家分享下。二、实现过程一开始看上去并不能登录,找不到原因......
  • 虹科案例|Redis企业版数据库:金融行业客户案例解读
    传统银行无法提供无缝的全渠道客户体验、无法实时检测欺诈、无法获得业务洞察力、用户体验感较差、品牌声誉受损和业务损失?虹科提供的Redis企业版数据库具有低延迟、高吞......
  • 成功案例展示 | 1.54寸屏应用于艾美特空气净化器
    伴随着国民经济的飞速发展,空气质量问题对健康的影响受到了越来越广泛的关注,由于各种空气污染现象的发生以及消费水平升级的驱动,更多的消费者开始使用空气净化器。空气净化......
  • 跑通darknet官网的案例
    ------------------------------------------到底是哪里的问题--------------------------------------  一、下载数据集二、划分数据集1.划分哪里的数据集,又......
  • scrapy框架图片爬取案例——以堆糖网为例
    本节主要分享的是scrapy框架中关于图片类的简单爬取方法,在这里只需要用到三个文件:1.setting.py进行scrapy抓取图片所用到的基础。2.duitang_spider.py实现获取多出url进......
  • 02_08_Java语音进阶||day08_File类、递归、综合案例(文件过滤器)
    第一章File类1.1概述(API)java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录(表示文件夹)的创建,查找和删除等操作。目录就是文件夹的意思java把电脑中的文件和......
  • 02_07_Java语音进阶||day07_等待与唤醒案例、线程池、Lambda表达式
    第一章等待唤醒机制1.1线程间通信概念:多个线程在处理同一个资源(包子),但是处理的动作(线程的任务)却不相同。比如:线程A用来生产包子的,线程B用来吃包子的,包子可以理解......
  • 记录下SQL注入案例
    SQL注入大扫除时发现了几年前的笔记本,稍微看了下过去的笔记。SQL注入这玩意虽说是很老的问题了,在mybatis等优秀的ORM框架里面早已经通过预编译技术解决了。但是突然......
  • redis(11)事务秒杀案例
    秒杀案例描述现在有1个秒杀的功能,1个原来价值5000元的手机现在搞活动,降价到1块钱,做秒杀活动。库存就10个,假设有10000人抢购。目前逻辑是:抢到了商品库存就减1,然后把用户id......