ImageResizer DiskCache+AzureReader 异常行为

ImageResizer DiskCache+AzureReader strange behaviour

我正在使用 ImageResizer + Diskcache 插件,我发现了让缓存正常工作的问题。图片要么永久缓存(无论我上传新图片多少次),要么更改某些设置,我在某些 browsers/computers 中得到旧图像,在其他中得到新图像。

这就是我 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" />

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

我在想:

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

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

I get the old image in some browsers/computers and the new one in others.

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

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

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

您正在使用 checkForModifiedFiles="true" cacheMetadata="true",这意味着 Azure 查询的最新修改日期,但该元数据已缓存并具有滑动过期 window 1小时。即,如果 URL 在 1 小时内未被访问,则下一个请求将导致检查修改日期。参见 StandardMetadataCache

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