我正在使用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" />
不确定是否可以使用现有参数实现。我的目标是优先在上传新图像时使缓存无效,而不必更改为图像提供服务的查询字符串以获取新图像。
我在想:
我看过一些关于使用IVirtualFileWithModifiedDate的帖子,但据我所知,这会产生很大的性能影响?可能有5%的图片要求有人上传图片并期望它立即看到它,因为大多数图片几乎没有变化,但如果图像没有显示新图像,那真的很令人沮丧甚至在他们上传后的一天都没有!
如果我可以使用IVirtualFileWithModifiedDate
在图像更改时使缓存无效而不是在每个图像请求中?那可能吗?
答案 0 :(得分:1)
我在某些浏览器/计算机中获取旧图像,在其他浏览器/计算机中获取新图像。
不同的浏览器显示不同的版本表示浏览器缓存或代理/ CDN缓存有问题。
ImageResizer的DiskCache哈希修改日期,因此它始终与存储提供程序一样正确。
关于服务器端失效的期望:
您正在使用checkForModifiedFiles="true" cacheMetadata="true"
,这意味着Azure 将查询最新修改日期,但该元数据将缓存,并且滑动到期时间为1小时。即,如果在1小时内未访问URL,则下一个请求将导致检查修改日期。见StandardMetadataCache。
您可以通过自己实施IMetadataCache并将该缓存分配给您正在使用的存储提供商的.MetadataCache成员来更改此行为。