ImageResizer DiskCache + AzureReader奇怪的行为

时间:2016-10-19 16:21:24

标签: imageresizer imageresizer-diskcache

我正在使用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在图像更改时使缓存无效而不是在每个图像请求中?那可能吗?

1 个答案:

答案 0 :(得分:1)

  

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

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

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

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

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

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