Я использую "Redis-x64-3.0.504" и пытаюсь разместить свое веб-приложение asp.net core 2.2 на IIS Express локально, но кэш redis не работает должным образом на IIS, потому что, кажется, застрялпри загрузке при доступе или сохранении в кеш.Тем не менее - он работает отлично, когда я запускаю Visual Studio как localhost.
Я добавил Microsoft.Extentions.Caching.StackExchangeRedis (2.2.5) nuget и код в ConfigureServices(IServiceCollection service)
для конфигурации.
Код выглядит следующим образом:
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = "localhost";
options.InstanceName = "SampleInstance";
});
А затем я создал класс CacheHelper
в качестве обобщенного метода для доступа к кэшу:
public static class CacheHelper
{
public static void SaveInCache<T>(IDistributedCache memoryCache, string key, T value)
{
var graphJSON = JsonConvert.SerializeObject(value);
memoryCache.SetStringAsync(key, graphJSON);
}
public static T GetFromCache<T>(IDistributedCache memoryCache, string key)
{
var cacheValue = memoryCache.GetStringAsync(key);
return JsonConvert.DeserializeObject<T>(cacheValue.Result != null ? cacheValue.Result : string.Empty);
}
public static T GetMatchFromCache<T>(IDistributedCache memoryCache, string matchKey)
{
var redis = StackExchange.Redis.ConnectionMultiplexer.Connect("localhost");
var db = redis.GetDatabase();
var serverEndpoints = redis.GetEndPoints()[0];
var keys = redis.GetServer(serverEndpoints).Keys(pattern: "*");
foreach(var key in keys)
{
if (key.ToString().Contains(matchKey))
{
var trimmedKey = key.ToString().Substring(key.ToString().IndexOf(matchKey));
return GetFromCache<T>(memoryCache, trimmedKey);
}
}
return default(T);
}
public static List<T> GetAllMatchFromCache<T>(IDistributedCache memoryCache, string matchKey)
{
List<T> contentList = new List<T>();
var redis = StackExchange.Redis.ConnectionMultiplexer.Connect("localhost");
var db = redis.GetDatabase();
var serverEndpoints = redis.GetEndPoints()[0];
var keys = redis.GetServer(serverEndpoints).Keys(pattern: "*");
foreach (var key in keys)
{
if (key.ToString().Contains(matchKey))
{
var trimmedKey = key.ToString().Substring(key.ToString().IndexOf(matchKey));
var cacheReturn = GetFromCache<T>(memoryCache, trimmedKey);
if (cacheReturn != null)
{
contentList.Add(cacheReturn);
}
}
}
return contentList;
}
}
Я так растерялся, почему это не работает на IIS, ноработает на моем местном хосте.Как я могу заставить это работать на хосте IIS?