0

我正在使用ImageResizer+Diskcache插件,我正在寻找让缓存正常工作的问题。图像要么被永久缓存(无论我上传多少次新图像),要么更改一些设置,我在某些浏览器/计算机中获取旧图像,而在其他浏览器/计算机中获取新图像。

这就是我现在的 web.config 中的内容:

<add name="AzureReader2" connectionString="blahblahblah" endpoint="http://blahblahblah.blob.core.windows.net/" prefix="~/" redirectToBlobIfUnmodified="false" requireImageExtension="false" checkForModifiedFiles="true" cacheMetadata="true"/>

和:

    <diskcache dir="~/imagecache" autoclean="true" hashModifiedDate="true" subfolders="8192" asyncWrites="true" asyncBufferSize="10485760" cacheAccessTimeout="15000" logging="true" />

不确定是否可以使用现有参数实现。我的目标是最好在上传新图像时使缓存无效,而不必更改为图像提供服务的查询字符串以获取新图像。

我刚在想:

  • 也许有一个 blob 存储触发器,当替换图像已上传时,会触发一个删除该图像缓存的 webhook?
  • 或者对我的 imageresizer 应用程序的 Web 请求以在缓存中预加载新图像,以便替换旧的缓存图像???

我看过一些关于使用 IVirtualFileWithModifiedDate 的帖子,但据我了解,这会对性能产生很大影响吗?可能有 5% 的图像请求会让人上传图像并期望它立即看到它,因为大多数图像几乎没有变化,但如果图像在他们之后一天都没有显示新图像,这真的很令人沮丧已经上传了!

如果我可以IVirtualFileWithModifiedDate在图像更改而不是在每个图像请求中使用使缓存无效?那可能吗?

4

1 回答 1

1

我在某些浏览器/计算机中获得旧图像,而在其他浏览器/计算机中获得新图像。

不同的浏览器显示不同的版本表明浏览器缓存或代理/CDN 缓存有问题。

ImageResizer 的 DiskCache 对修改日期进行哈希处理,因此它始终与存储提供程序一样正确。

关于您对服务器端失效的期望:

您正在使用checkForModifiedFiles="true" cacheMetadata="true",这意味着查询 Azure获取最新的修改日期,但该元数据以 1 小时的滑动到期窗口进行缓存。即,如果一个 URL 在 1 小时内没有被访问,下一个请求将导致检查修改日期。请参阅标准元数据缓存

您可以通过自己实现IMetadataCache并将该缓存分配给您正在使用的存储提供程序的 .MetadataCache 成员来更改此行为。

于 2016-10-25T18:06:50.743 回答