Imageresizer的Diskcache插件忽略使用AzureReader2检索的图像的修改日期

时间:2014-05-08 10:43:42

标签: azure azure-storage-blobs imageresizer imageresizer-diskcache

当我将新版本的图像(具有相同名称但具有新的Last Modified属性)上载到Azure存储时,通过URL API调用的已调整大小的版本不会更新。

直接从此网址查看时,新图片会显示: [删除] .blob.core.windows.net / xlenz /改性test.jpg放在

但是当我查看调整后的缓存版本时,我仍然会得到旧版本: [删除]的.com /云/ xlenz /改性test.jpg放在?宽度= 700

Last-Modified: Thu, 08 May 2014 09:22:46 GMT
ETag: "ddf1d8129f6acf1:0"
Content-Type: image/jpeg
Cache-Control: public

请求新的未缓存版本的图片确实显示新版本: [删除]的.com /云/ xlenz /改性test.jpg放在?宽度= 800

Last-Modified: Thu, 08 May 2014 10:12:20 GMT
ETag: "a28693ffa56acf1:0"
Content-Type: image/jpeg
Cache-Control: public

当我将新版本的图像直接FTP到网站时,通过URL API调用的已调整大小的版本会更新: [删除]的.com /改性test.jpg放在?宽度= 700

我知道问题出在DiskCache而不是AzureReader2上,因为当我通过<diskCache enabled="false" />禁用DiskCache时,问题就会消失。

这是DiskCache插件中的错误吗? DiskCache是​​否不查看Azure Blob存储中文件的上次修改日期?

我使用最新的3.4.2版ImageResizer,ImageResizer.Plugins.AzureReader2和ImageResizer.Plugins.DiskCache。

诊断页面输出:https://gist.github.com/anonymous/e104f8127969cedf92fd

2 个答案:

答案 0 :(得分:0)

禁用缓存时,每个请求都会从Azure下载源图像的新副本。

要提供基于上次修改日期的失效,您必须在每个请求上检查Azure(或根据更多过期规则缓存元数据)。

AzureReader2不允许DiskCache访问azure blob的修改日期,因为这会使缓存的图像访问速度变慢。网络延迟不容小觑:)

使用blob或远程存储时,最好的失效策略完全没有 - 将blob视为不可变。这并不意味着您无法更新现有图像URls的响应 - 这只是意味着您必须在某处维护重写表。

答案 1 :(得分:0)

查看S3Reader2(Amazon S3存储的等效插件)我得出的结论是,这不是一个错误,而是一个缺失的功能。

S3Reader2有一个'checkForModifiedFiles'配置设置:

  

如果为true,S3Reader将在a时检查S3上的更新源文件   请求缓存文件。元数据缓存一小时后   上次访问(可通过代码配置)。如果为false,S3将永远不会   检查更新版本的缓存文件,减少延迟成本   50%。默认为false。

这正是我在AzureReader2中寻找的东西!

我已在官方ImageResizer UserVoice网站上添加功能请求http://resizer.uservoice.com/forums/108373-image-resizer/suggestions/5900800-add-checkformodifiedfiles-configuration-setting-l

请加上你的投票!

作为临时解决方法(当我们等待修复时),我们会将当前日期添加到ImageResizer请求中,这些请求会转到每天(部分)更新的图像。

更新2015-02-26 :@ nathanael-jones在http://resizer.uservoice.com/forums/108373-image-resizer/suggestions/5900800-add-checkformodifiedfiles-configuration-setting-l上写道: “这个功能已经完成,并且存在于V4和GitHub上的开发分支中。”

感谢投票!