ImageResizer DiskCache+AzureReader 异常行为
ImageResizer DiskCache+AzureReader strange behaviour
我正在使用 ImageResizer
+ Diskcache
插件,我发现了让缓存正常工作的问题。图片要么永久缓存(无论我上传新图片多少次),要么更改某些设置,我在某些 browsers/computers 中得到旧图像,在其他中得到新图像。
这就是我 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 应用程序的 Web 请求以预加载新图像
缓存以便它替换旧的缓存图像???
我看过一些关于使用 IVirtualFileWithModifiedDate 的帖子,但据我所知,这会对性能产生很大影响吗?我们的图像请求中可能有 5% 会让人上传图像并期望它立即看到它,因为大多数图像几乎没有变化,但如果图像甚至在更新后一天都没有显示新图像,那真的很令人沮丧已上传!
如果我可以使用 IVirtualFileWithModifiedDate
在图像更改时而不是在每个图像请求中使缓存无效?可以吗?
I get the old image in some browsers/computers and the new one in others.
不同的浏览器显示不同的版本表明浏览器缓存或 proxy/CDN 缓存有问题。
ImageResizer 的 DiskCache 对修改日期进行哈希处理,因此它始终与存储提供商一样正确。
关于您对服务器端失效的期望:
您正在使用 checkForModifiedFiles="true" cacheMetadata="true"
,这意味着 Azure 是 查询的最新修改日期,但该元数据已缓存并具有滑动过期 window 1小时。即,如果 URL 在 1 小时内未被访问,则下一个请求将导致检查修改日期。参见 StandardMetadataCache。
您可以通过自己实施 IMetadataCache 并将该缓存分配给您正在使用的存储提供商的 .MetadataCache 成员来更改此行为。
我正在使用 ImageResizer
+ Diskcache
插件,我发现了让缓存正常工作的问题。图片要么永久缓存(无论我上传新图片多少次),要么更改某些设置,我在某些 browsers/computers 中得到旧图像,在其他中得到新图像。
这就是我 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 应用程序的 Web 请求以预加载新图像 缓存以便它替换旧的缓存图像???
我看过一些关于使用 IVirtualFileWithModifiedDate 的帖子,但据我所知,这会对性能产生很大影响吗?我们的图像请求中可能有 5% 会让人上传图像并期望它立即看到它,因为大多数图像几乎没有变化,但如果图像甚至在更新后一天都没有显示新图像,那真的很令人沮丧已上传!
如果我可以使用 IVirtualFileWithModifiedDate
在图像更改时而不是在每个图像请求中使缓存无效?可以吗?
I get the old image in some browsers/computers and the new one in others.
不同的浏览器显示不同的版本表明浏览器缓存或 proxy/CDN 缓存有问题。
ImageResizer 的 DiskCache 对修改日期进行哈希处理,因此它始终与存储提供商一样正确。
关于您对服务器端失效的期望:
您正在使用 checkForModifiedFiles="true" cacheMetadata="true"
,这意味着 Azure 是 查询的最新修改日期,但该元数据已缓存并具有滑动过期 window 1小时。即,如果 URL 在 1 小时内未被访问,则下一个请求将导致检查修改日期。参见 StandardMetadataCache。
您可以通过自己实施 IMetadataCache 并将该缓存分配给您正在使用的存储提供商的 .MetadataCache 成员来更改此行为。