2015-01-03 3 views
2

Я пытаюсь использовать 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); 
+0

Да, это не особенно мало - это не должно быть ужасно; вы используете локальную память сервера в качестве кеша * перед * ударом redis? –

+0

@MarcGravell no на данный момент я использую redis (основная причина, по которой я хотел сделать предварительную загрузку кеша для популярных запросов), но я могу сделать, если это необходимо, до попытки использовать Redis. Я использовал локальную память , –

+0

Вы измерили, где потрачено время? это пропускная способность? или это время десериализации? –

ответ

3

Из комментариев, это звучит как вопрос пропускной способности ... Итак: использование меньше пропускной способности. Идеи:

  1. сжатие Использования (в идеале, только если нетривиальной размер и т.д.)
  2. Используйте более плотный формат

для справки, на SE мы используем GZIP сжатого Protobuf-сеть для упаковки

+0

Использование Gzip и Protbuf получило размер до 8K и значительно улучшило его, в то время как в кеше памяти. Большое спасибо за помощь! –

Смежные вопросы