当我将新版本的图像(具有相同名称但具有新的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
答案 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上的开发分支中。”
感谢投票!