java - 使用 Java 进行动态图像缓存

标签 java servlets

我有一个带有 API 的 servlet,可以从 GET 请求传送图像。 servlet 根据 GET 请求的参数创建 CAD 命令的数据文件。然后将该数据文件传送到图像解析器,该图像解析器在文件系统上创建图像。 servlet 读取图像并返回响应中的字节。

所有 IO 和图像解析器程序的调用都可能非常繁重,大约 80kb 的图像在本地系统上渲染时间为 3-4000 毫秒。

GET 请求大约有 20 个参数。每个都与图像的不同部分相关。因此,可能的图像组合非常大。

为了减少加载时间,我计划将渲染图像的 BLOB 存储在数据库中。如果 GET 请求与之前执行的请求匹配,我将从缓存中提取。否则,我将渲染一个新的。这不会修复“第一次”运行,但会帮助“n+1 次运行”。

关于如何提高性能还有其他想法吗?

最佳答案

您可以将文件存储在您的磁盘上,并将图像路径存储在数据库中,因为数据库存储通常比文件系统存储更昂贵。

对 http get 参数进行排序,并将它们散列为该图像记录的索引,以便通过参数进行快速查询。

为确保您的程序在磁盘容量不足时不崩溃,您应该删除未使用或很少使用的记录:

为每条记录存储一个 lastAccessedTime,每次请求图像时更新。

使用调度程序检查 lastAccessedTime,删除低于指定权重的记录。 您可以使用不同的策略来计算权重,例如lastAccessedTime、accessedCount、image size等。

关于java - 使用 Java 进行动态图像缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13908137/

相关文章:

jsp - web.xml 中的以下条目指的是什么?

java - 如何将动态生成的 pdf 注入(inject)到 gwt iframe 中

java - 更改默认 Servlet 响应

java - Java Swing 的 Seaglass 外观和感觉

java - 关于将 HttpRequest 和 HttpResponse 传递给服务层的想法?

java - 我可以在 TableView 中使用 CheckBoxTableCell 作为让用户选择多行的方法吗?

java - 我如何在Android中使用下一个和上一个按钮循环数组值

java - 显示图像标签的SRC属性为相对路径的图像

java - 你如何自动转义一段mysql文本中的字符

java - 如何使用 exe4j 为 java 应用程序创建安装程序?