ImageResizer DiskCache+AzureReader странное поведение
Я использую 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" />
Не уверен, что могу ли я достичь, используя существующие параметры. Моя цель состоит в том, чтобы сделать кэш недействительным, предпочтительно, когда новое изображение было загружено, без необходимости изменять строку запроса, обслуживающую изображение, чтобы получить новое.
Я думал:
- Возможно, наличие триггера для хранения больших двоичных объектов, который при загрузке замещающего изображения запускает веб-крючок, который удаляет кэш для этого изображения?
- Или веб-запрос к моему приложению imageresizer, чтобы предварительно загрузить новое изображение в кэш, чтобы оно заменило старое кэшированное изображение???
Я видел несколько постов об использовании IVirtualFileWithModifiedDate, но насколько я понимаю, это сильно повлияет на производительность? Это, вероятно, 5% нашего запроса изображений, когда кто-то загрузит изображение и ожидает, что оно увидит его сразу, поскольку большинство изображений практически не меняются, но это действительно расстраивает, если изображение не показывает новое даже через день после того, как они загрузил его!
Если я могу использовать IVirtualFileWithModifiedDate
сделать недействительным кеш, когда изображение изменилось и не в каждом запросе изображения? Это будет возможно?
1 ответ
Я получаю старое изображение в некоторых браузерах / компьютерах, а новое - в других.
То, что разные браузеры отображают разные версии, указывает на то, что кеширование в браузере или прокси /CDN является ошибкой.
DiskCache в ImageResizer хэширует дату изменения, поэтому она всегда так же корректна, как и поставщик хранилища.
Что касается ваших ожиданий в отношении аннулирования на стороне сервера:
Вы используете checkForModifiedFiles="true" cacheMetadata="true"
Это означает, что в Azure запрашивается последняя измененная дата, но метаданные кэшируются с помощью скользящего окна истечения срока действия 1 час. То есть, если URL не был доступен в течение 1 часа, следующий запрос приведет к проверке измененной даты. См. StandardMetadataCache.
Вы можете изменить это поведение, внедрив IMetadataCache самостоятельно и назначив этот кеш члену.MetadataCache поставщика хранилища, который вы используете.