我正在使用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使缓存无效时,图像已经改变,而不是在每个图像请求?那有可能吗?
发布于 2016-10-25 18:06:50
我在一些浏览器/计算机中得到旧的图像,在另一些浏览器/计算机中得到新的图像。
不同的浏览器正在显示不同的版本,这表明浏览器缓存或代理/CDN缓存都是错误的。
ImageResizer的DiskCache对修改后的日期进行散列,因此它始终与存储提供程序一样正确。
关于您对服务器端失效的期望:
您使用的是checkForModifiedFiles="true" cacheMetadata="true",这意味着将查询Azure的最新修改日期,但元数据将以1小时的滑动过期窗口缓存。也就是说,如果一个URL在1小时内没有被访问,那么下一个请求将导致检查修改后的日期。见StandardMetadataCache。
您可以通过自己实现IMetadataCache并将该缓存分配给正在使用的存储提供程序的.MetadataCache成员来更改此行为。
https://stackoverflow.com/questions/40136795
复制相似问题