当前位置: 首页 > news >正文

基于缓存提高Java模板文件处理性能:减少磁盘I/O的实践与探索

1、优化背景及动机

背景

线上有一个需求:读取模板文件,并根据不同的业务将数据写入模板文件,生成一个新的文件。模板文件本身是不会变的,所以每次生成文件都要去读取一遍模板文件,会有很多的磁盘IO操作,并且如果模板文件比较大的话,会更加的影响性能。
所以这次针对这个问题,我做了如下优化:
1、将模板文件加载到内存中,后续再生成文件时可直接读取内存中的模板文件对象,而不是去磁盘读文件。
2、要确保我们生成新文件的时候,模板文件不能被篡改,所以需要用深拷贝来获取模板文件的拷贝。
3、为了确保并发场景下,同一个模板文件只会被加载一次,我采用ConcurrentMap来实现。
读取模板文件并加载到内存中,以及深拷贝的代码如下:

@Slf4j
public class WordTemplateCache {private static final ConcurrentMap<String, XWPFTemplate> templateCache = new ConcurrentHashMap<>();public static XWPFTemplate getTemplate(String templatePath) throws IOException {// 检查缓存中是否有该模板// 使用 computeIfAbsent 保证同一个模板只加载一次XWPFTemplate document = templateCache.computeIfAbsent(templatePath, path -> {try {return XWPFTemplate.compile(path

http://www.mrgr.cn/news/4140.html

相关文章:

  • DMDSC搭建
  • 软件测试学习笔记丨多表查询及子查询
  • React 学习——React.memo(简单、引用类型的prop)
  • Maven的简单使用
  • maven进阶(超详细)
  • [论文笔记]ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
  • etcd参数解释
  • 《艺术与设计》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 18款各具特色的项目管理系统软件,项目经理用过都说好!
  • Unity XR Interaction Toolkit 通过两个手柄控制物体放大缩小
  • 开源低代码开发工具Lowcoder
  • VTK—vtkCutter截取平面数据
  • 嵌入式AI快速入门课程-K510篇 (第二篇 Ubuntu的基础操作)
  • uniapp 获取定位权限及问题解决
  • wordrpess心得
  • 【图文并茂】ant design pro 如何给后端发送 json web token - 请求拦截器的使用
  • 设计模式 -- 七大原则(二)-- 接口隔离原则
  • LeetCode216 组合总和 III
  • 十三、OpenCVSharp的目标检测
  • Android常见的界面布局