Я разработал приложение Asp.Net Core с использованием .Net Core 2.1 и Visual Studio 2017. Запуск этого на IIS 7.
Если я запускаю это приложение локально, кажется, что MemoryCache продолжает удерживатьрассматриваемая пара ключ-значение после первого набора пары ключ / значение. На сервере кажется, что он никогда не сохраняет пару ключ / значение. Я использую Dependency Injection в своих контроллерах, и у меня есть базовый контроллер, который унаследован от всех других контроллеров. В этом базовом контроллере есть метод GET, который вызывает в базе данных около 40000 строк данных, которые преобразуются в JSONResult, который я затем помещаю в MemoryCache. При последующих вызовах этого GET-запроса он должен возвращать JSONResult, хранящийся в MemoryCache, по крайней мере, так происходит локальная отладка.
Кэш памяти добавляется в ConfigureServices с помощью этой строки services.AddMemoryCache();
Затем вбазовый контроллер Я установил длительный запрос к базе данных в JsonResult и сохранил его в кеше памяти следующим образом:
JsonResult geos = null;
if(!_cache.TryGetValue<JsonResult>("GeoLocations", out geos))
{
JsonResult newGeos = Json(await _wlDal.GetLocationInfo());
// Set cache options.
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetAbsoluteExpiration(new DateTime(9999, 12, 31));
// Save data in cache.
_cache.Set("GeoLocations", newGeos, cacheEntryOptions);
}
return _cache.Get("GeoLocations") as JsonResult;
Насколько я понимаю, строка services.AddMemoryCache()
должна создавать экземпляр синглтона, который может использоваться в приложении. и вводится в контроллеры. Есть что-то, чего я здесь не хватает? Первый вызов этого метода GET обычно занимает около 13 секунд из-за 40000 строк данных, возвращаемых из SQL. В этом и заключается смысл кэширования этих данных для использования несколькими сеансами / пользователями. У кого-нибудь есть идеи относительно того, почему кажется, что эта пара ключ / значение не сохраняется на веб-сервере?