Я пытаюсь использовать Redis в Azure для кэширования в своем приложении. Каждый из моих ключей может составлять 2-4 МБ каждый. Когда я запускаю свое приложение против Redis на моем локальном компьютере, все отлично, однако при запуске на Azure производительность ужасна, извлечение ключей часто занимает 8-10 секунд, а на самом деле быстрее для меня вернуть эти данные из оригинала чем из кеша.Хранение больших объектов (2MB) в Redis Azure
Так что, я думаю, первый вопрос: мои ключи слишком большие? Разве я просто лаяю неправильное дерево, используя Редис?
Если нет, любые идеи, почему это так медленно? Приложение является веб-сайтом Azure, а веб-сайт и экземпляр redis находятся в одной зоне. Я использую клиент stackexchange Redis и создания мультиплексора в файле global.asax как синглтон, чтобы избежать повторного создания этого кода для этого ниже:
Global.asax:
redisConstring = ConfigurationManager.ConnectionStrings["RedisCache"].ConnectionString;
if (redisConstring != null)
{
if (RedisConnection == null || !RedisConnection.IsConnected)
{
RedisConnection = ConnectionMultiplexer.Connect(redisConstring);
}
RedisCacheDb = RedisConnection.GetDatabase();
Application["RedisCache"] = RedisCacheDb;
}
Web API управления:
IDatabase redisCache = System.Web.HttpContext.Current.Application["RedisCache"] as IDatabase;
string cachedJson = redisCache.StringGet(id);
if (cachedJson == null)
{
cachedJson=OutfitFactory.GetMembersJson(id);
redisCache.StringSet(id, cachedJson, TimeSpan.FromMinutes(15));
}
return OutfitFactory.GetMembersFromJson(cachedJson);
Да, это не особенно мало - это не должно быть ужасно; вы используете локальную память сервера в качестве кеша * перед * ударом redis? –
@MarcGravell no на данный момент я использую redis (основная причина, по которой я хотел сделать предварительную загрузку кеша для популярных запросов), но я могу сделать, если это необходимо, до попытки использовать Redis. Я использовал локальную память , –
Вы измерили, где потрачено время? это пропускная способность? или это время десериализации? –