Понимание HttpContext.Current.Cache
Я вносил некоторые изменения в сайт и заметил, что когда я делаю изменения в базе данных, т.е. добавьте новое значение человека, имя человека не отображается в раскрывающемся списке.
Если я несколько раз сбрасываю пул приложений, имя, наконец, появляется для меня. Хотя не всегда, кажется, для других.
Кажется, что он сильно контролируется кешем, и я обнаружил следующее:
HttpContext.Current.Cache.Insert("PersohnList", d, Nothing,
DateTime.MaxValue, New System.TimeSpan(0, 30, 0),
Caching.CacheItemPriority.High, Nothing)
Я заметил несколько ценностей, представляющих интерес,
a) DateTime.MaxValue
b) New System.TimeSpan(0, 30, 0)
Срок действия кэша истечет через 30 минут и будет добавлено имя нового человека, или срок его действия не истечет из-за DateTime.MaxValue.
Есть идеи?
2 ответа
Я не уверен, что победит. Похоже, что этот код устанавливает скользящие и абсолютные. Я бы предположил, что последний выиграет в этом, но в документации MSDN говорится, что вы должны использовать только один или другой. При использовании slideExpiration следует установить для параметра absoluteExpiration значение NoAbsoluteExpiration, а при использовании absoluteExpiration для параметра slideExpiration - значение NoSlidingExpiration.
На вашем месте я бы просто сделал недействительным кеш при обновлении значения (HttpContext.Current.Cache.Remove("PersohnList")
и перезагрузите его снова.
+1 для раздвижного окна. Каждый раз, когда другой пользователь касается этого ключа, "PersohnList", срок действия кэша увеличивается еще на 30 минут. Кроме того, проверьте System.Runtime.Caching как более современную альтернативу.
От http://msdn.microsoft.com/en-us/library/system.runtime.caching%28v=vs.110%29.aspx
"Пространство имен System.Runtime.Caching содержит типы, которые позволяют реализовывать кэширование в приложениях NET Framework.
Классы в этом пространстве имен предоставляют возможность использовать такие средства кэширования, как в ASP.NET, но без зависимости от сборки System.Web."