2

我创建了一个提供图像的网络服务。这将永远是单向通信。从服务获取图像的一方永远不会更改图像。

它有多个来源,有些来源可能很远,连接不良。我已经为它创建了一个内存缓存,但我还想有一个磁盘缓存,以便更长时间地存储图像。我有点不确定执行此操作的最佳方法。

首先,我所有的来源都是网络服务器,所以我真的不知道如何检查我想使用的图像的最后修改日期(例如),以查看文件是否已更改。

其次,如何最好地存储本地缓存?只需将文件放在文件夹中并将日期与原始来源进行比较?或者,也许将所有时间戳与所有图像一起存储在一个 txt 文件中,以避免检查文件。或者,也许将它们存储在本地 SQL Express 数据库中?

通常,图像不是很大。大多数约为200kb。但是,时不时会有 7+ mb。最大的问题是,将托管服务的某些位置的连接非常糟糕,并且它们需要多次使用相同的图像。没有真正的性能要求,我只是想让它尽可能地响应,对于与我们的中央服务器有可怕连接的位置。

我无法安装任何“真正的”缓存系统。它必须是我可以在我的代码中处理的东西。

4

1 回答 1

2

为什么不在服务器上安装代理服务器,并通过它访问所有远程 Web 服务器?代理服务器将为您处理缓存。

编辑:由于您无法安装任何东西并且没有可用的数据库,因此恐怕您无法自己实现磁盘缓存。

好消息是 - 它相对容易。您需要选择一个文件夹并将图像文件放在那里。并且您需要在图像标识和文件名之间进行唯一映射。如果您的图像 ID 是数字,则映射非常简单......

当您收到图像请求时,首先在磁盘上检查它。如果它在那里,你已经拥有它。如果没有,请从远程服务器下载并存储在那里,然后从那里提供服务。

您需要考虑并发请求。确保将文件写入磁盘是一个相对简短的过程(完成下载后即可写入)。当您将文件写入磁盘时,请确保没有人可以打开它进行阅读,这样您就可以避免发送不完整的文件。

现在您只需要处理文件不在缓存中的情况,并且一次收到两个对它的请求。如果性能不是真正的问题,只需下载两次。

于 2012-10-16T06:30:42.243 回答