ImageResizer DiskCache+AzureReader奇怪的行为



我正在使用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应用程序请求预加载新图像缓存,所以它取代旧的缓存图像??

我看过一些关于使用IVirtualFileWithModifiedDate的帖子,但从我的理解,这将有很大的性能影响?大概有5%的图片请求会让人上传图片,并希望它能马上看到,因为大多数图片几乎没有变化,但如果图片在上传后不到一天就没有显示新的,这真的很令人沮丧!

如果我可以使用IVirtualFileWithModifiedDate无效缓存时,图像已经改变,而不是在每个图像请求?这可能吗?

我在一些浏览器/电脑上得到旧的图像,而在另一些浏览器/电脑上得到新的图像。

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

ImageResizer的DiskCache散列修改日期,所以它总是和存储提供商一样正确。

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

您正在使用checkForModifiedFiles="true" cacheMetadata="true",这意味着查询Azure 以查询最近修改的日期,但是元数据缓存为1小时的滑动过期窗口。例如,如果一个URL在1小时内没有被访问,下一个请求将导致检查修改后的日期。看到StandardMetadataCache。

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

最新更新