我有一个带有 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/