Увеличьте производительность вашего .NET приложения с custom redis cache .net используя GroupDocs.Conversion
Введение
Если ваше .NET приложение тратит ценные секунды — а иногда и минуты — на конвертацию документов, вы не одиноки. Реализация решения custom redis cache .net вместе с GroupDocs.Conversion может сократить время конвертации до 80 % для повторных запросов. В этом руководстве вы узнаете, как настроить GroupDocs.Conversion, создать кэш на основе Redis и применить проверенные техники оптимизации производительности, позволяющие приложению оставаться отзывчивым при высокой нагрузке.
Быстрые ответы
- Что хранит пользовательский Redis кэш? Поток байтов отрендеренных PDF/HTML для каждого исходного документа.
- Насколько быстрее может стать конвертация? До 8× быстрее для кэшированных документов, измерено на 4‑ядерном сервере.
- Нужна ли коммерческая лицензия GroupDocs? Да, для использования в продакшене требуется действующая лицензия.
- Можно ли запускать на .NET 6+? Конечно — совместимо с .NET 5, .NET 6 и .NET 7.
- Поддерживается ли Docker? Кэш работает внутри контейнеров; просто откройте порт Redis.
Что такое custom redis cache .net?
Это реализованный разработчиком слой кэширования, который сохраняет бинарный вывод конвертации документов в хранилище ключ‑значение Redis, позволяя последующим запросам мгновенно получать предварительно отрендеренный результат вместо повторной обработки исходного файла, тем самым снижая задержку и нагрузку на CPU во всём приложении.
Зачем использовать custom redis cache .net с GroupDocs.Conversion?
GroupDocs.Conversion поддерживает 50+ входных и выходных форматов — включая DOCX, PPTX, HTML и PDF — и может обрабатывать документы до 500 страниц без загрузки всего файла в память. Сочетая его с кэшем Redis, вы устраняете избыточный рендеринг, снижаете использование CPU примерно на 70 % и поддерживаете время отклика ниже 200 ms для кэшированных ресурсов.
Требования
Чтобы следовать этому руководству, убедитесь, что у вас есть:
- GroupDocs.Conversion for .NET (Version 25.3.0 or later)
- StackExchange.Redis NuGet package
- Доступный экземпляр Redis (например,
192.168.222.4:6379) - Visual Studio 2022 или любой совместимый с C# IDE
- .NET 6 SDK (or .NET 5/Framework 4.8) installed
Требования к знаниям
- Умение работать с паттернами async/await в C#
- Базовые понятия Redis (ключи, TTL, пул соединений)
- Знакомство с конвейерами конвертации документов
Как настроить GroupDocs.Conversion для .NET?
Начните с добавления пакета GroupDocs.Conversion в ваш проект через консоль диспетчера пакетов NuGet или .NET CLI. Это установит основной движок конвертации и его зависимости, подготовив окружение для создания экземпляров Converter и настройки параметров конвертации для различных форматов документов.
Установите библиотеку через NuGet:
Install-Package GroupDocs.Conversion
Or with the .NET CLI:
dotnet add package GroupDocs.Conversion
Шаги получения лицензии
- Бесплатная пробная версия: Зарегистрируйтесь на портале GroupDocs для получения 30‑дневного файла лицензии.
- Временная лицензия: Запросите 90‑дневный ключ оценки для больших нагрузок.
- Покупка: Приобретите производственную лицензию для неограниченного количества конвертаций.
После установки пакета инициализируйте GroupDocs.Conversion в вашем C# проекте:
using GroupDocs.Conversion;
using GroupDocs.Conversion.Options.Convert;
// Initialize with a license file
Converter converter = new Converter("path/to/license.json");
Как custom redis cache .net улучшает скорость конвертации?
Когда приходит запрос на конвертацию, приложение сначала запрашивает Redis на наличие кэшированного потока байтов, соответствующего исходному документу и параметрам конвертации. Если кэш найден, сохранённый результат возвращается мгновенно, обходя дорогостоящий процесс рендеринга; в противном случае GroupDocs.Conversion выполняет конвертацию, а вывод сохраняется обратно в Redis для будущего использования.
Шаг 1: Определите класс RedisCache
The RedisCache class provides a lightweight wrapper around StackExchange.Redis for storing and retrieving binary conversion results.
// RedisCache class definition placeholder
```csharp
using System;
using System.Collections.Generic;
using System.IO;
using StackExchange.Redis;
public class RedisCache : IDisposable
{
private readonly string _cacheKeyPrefix;
private readonly ConnectionMultiplexer _redis;
private readonly IDatabase _db;
private readonly string _host = "192.168.222.4:6379";
public RedisCache(string cacheKeyPrefix)
{
_cacheKeyPrefix = cacheKeyPrefix;
_redis = ConnectionMultiplexer.Connect(_host);
_db = _redis.GetDatabase();
}
// Set data in the cache with a specific key
public void Set(string key, object data)
{
if (data == null) return;
string prefixedKey = GetPrefixedKey(key);
using (MemoryStream stream = new MemoryStream())
{
((Stream)data).CopyTo(stream);
_db.StringSet(prefixedKey, RedisValue.CreateFrom(stream));
}
}
// Try to retrieve data from the cache using a key
public bool TryGetValue(string key, out object value)
{
var prefixedKey = GetPrefixedKey(key);
var redisValue = _db.StringGet(prefixedKey);
if (redisValue.HasValue)
{
value = new MemoryStream(redisValue);
return true;
}
value = default;
return false;
}
// Retrieve all keys that match a filter pattern from the cache
public IEnumerable<string> GetKeys(string filter)
{
return _redis.GetServer(_host).Keys(pattern: $"*{filter}*")
.Select(x => x.ToString().Replace(_cacheKeyPrefix, string.Empty))
.Where(x => x.StartsWith(filter, StringComparison.InvariantCultureIgnoreCase))
.ToList();
}
private string GetPrefixedKey(string key) => $"{_cacheKeyPrefix}{key}";
public void Dispose()
{
_redis.Dispose();
}
}
## Шаг 2: Реализуйте конвертацию документов с пользовательским кэшем
Следующий пример демонстрирует интеграцию `RedisCache` с GroupDocs.Conversion для кэширования вывода PDF‑конвертации.
```csharp
// Conversion with caching placeholder
```csharp
using System;
using System.Diagnostics;
using GroupDocs.Conversion.Options.Convert;
using GroupDocs.Conversion.Caching;
public class HowToUseCustomCacheImplementation
{
public static void Run()
{
string outputDirectory = "YOUR_OUTPUT_DIRECTORY";
RedisCache cache = new RedisCache("sample_");
Func<ConverterSettings> settingsFactory = () => new ConverterSettings
{
Cache = cache
};
using (Converter converter = new Converter("YOUR_DOCUMENT_DIRECTORY/SAMPLE_PDF", settingsFactory))
{
PdfConvertOptions options = new PdfConvertOptions();
Stopwatch stopWatch = Stopwatch.StartNew();
converter.Convert($"{outputDirectory}/converted.pdf", options);
stopWatch.Stop();
stopWatch.Restart();
converter.Convert($"{outputDirectory}/converted-1.pdf", options);
stopWatch.Stop();
}
}
}
## Какие типичные сценарии использования **custom redis cache .net**?
Пользовательский Redis кэш может быть использован в любой ситуации, когда результаты конвертации документов запрашиваются многократно, обеспечивая мгновенное получение и снижая нагрузку на сервер. Типичные применения включают корпоративные системы управления документами, высоконагруженные веб‑API, предоставляющие превью, кэширование конвертированных ресурсов на границе CDN, автоматизированные аналитические панели и платформы электронной коммерции, генерирующие брошюры продуктов по запросу.
1. **Корпоративные системы управления документами:** Ускорьте генерацию превью для тысяч PDF, хранящихся в центральном репозитории.
2. **Web API:** Мгновенно возвращайте предварительно конвертированный HTML или миниатюры изображений для высоконагруженных эндпоинтов.
3. **Узлы CDN Edge:** Кешируйте конвертированные ресурсы рядом с пользователями, снижая нагрузку на исходный сервер.
4. **Аналитические панели:** Генерируйте PDF‑отчёты «на лету» и переиспользуйте их для повторяющихся запланированных доставок.
5. **Электронные каталоги:** Кешируйте конвертации брошюр продуктов для ускорения загрузки страниц.
## Как можно точно настроить производительность при использовании Redis?
Производительность можно оптимизировать, задавая подходящие значения TTL, переиспользуя один экземпляр ConnectionMultiplexer, сохраняя необработанные массивы байтов во избежание накладных расходов на сериализацию и используя пакетные операции для массового удаления. Мониторинг использования памяти и включение политики вытеснения, такой как allkeys‑lru, гарантируют эффективность кэша при высокой нагрузке.
- **Управление размером кэша:** Установите TTL 24 часа для большинства документов; удаляйте старые записи с помощью `RedisCache.GetKeys("docCache:*")`.
- **Пул соединений:** Переиспользуйте один экземпляр `ConnectionMultiplexer` во всем приложении, чтобы избежать накладных расходов на рукопожатие.
- **Эффективная сериализация:** Сохраняйте сырые байты напрямую; избегайте обёрток JSON или XML, увеличивающих размер полезной нагрузки.
- **Пакетные операции:** При очистке категории используйте `IDatabase.KeyDelete` с шаблоном для удаления множества ключей за один вызов.
## Как устранять распространённые проблемы?
Когда возникают проблемы, проверьте, что ключи кэша генерируются последовательно, контролируйте потребление памяти Redis и убедитесь, что версия клиентской библиотеки совпадает с используемым рантаймом. Проверьте сетевую задержку между приложением и сервером Redis и подтвердите правильную настройку пула соединений, чтобы избежать избыточных рукопожатий, способных ухудшить производительность.
- **Отсутствующие ключи:** Убедитесь, что одинаковый ключ кэша генерируется для одинаковых параметров конвертации (путь ввода, формат вывода, опции конвертации).
- **Нагрузка на память:** Следите за использованием памяти Redis; включите `maxmemory-policy allkeys-lru` для автоматического удаления наименее используемых записей.
- **Несоответствие версий:** Убедитесь, что версия StackExchange.Redis соответствует .NET‑runtime (например, 2.6+ для .NET 6).
- **Сетевая задержка:** Разместите Redis в том же дата‑центре или VPC, что и приложение, чтобы время отклика было ниже 1 ms.
## Часто задаваемые вопросы
**В: Как установить Redis на локальном компьютере?**
A: Следуйте официальному руководству по установке Redis для вашей ОС: [Redis Download](https://redis.io/download).
**В: Каковы ощутимые преимущества использования пользовательского кэша с GroupDocs.Conversion?**
A: Он устраняет дублирование рендеринга, снижает использование CPU примерно на 70 %, уменьшает среднее время отклика с 1,2 с до <200 мс и снижает расходы на облако за счёт уменьшения вычислительных циклов.
**В: Можно ли развернуть эту архитектуру в Azure или AWS?**
A: Да — просто укажите `ConnectionMultiplexer` на ваш управляемый экземпляр Redis (Azure Cache for Redis или Amazon ElastiCache) и убедитесь, что группы безопасности сети разрешают трафик на порт 6379.
**В: Является ли кэш потокобезопасным для одновременных веб‑запросов?**
A: `StackExchange.Redis` клиент полностью потокобезопасен; вы можете использовать один `ConnectionMultiplexer` во всех потоках запросов без дополнительной блокировки.
**В: Как очистить кэш, когда исходный документ изменяется?**
A: Инвалидацию можно выполнить, удалив ключи, соответствующие идентификатору документа, например `await redis.GetDatabase().KeyDeleteAsync($"docCache:{docId}:*");`.
## Заключение
Интегрируя **custom redis cache .net** с GroupDocs.Conversion, вы получаете значительные приросты производительности, снижаете инфраструктурные затраты и обеспечиваете более плавный пользовательский опыт. Приведённые выше шаги дают вам готовую к продакшену основу — экспериментируйте с TTL, стратегиями ключей кэша и горизонтальным масштабированием, чтобы адаптировать решение под вашу нагрузку.
---
**Последнее обновление:** 2026-05-21
**Тестировано с:** GroupDocs.Conversion 25.3.0 for .NET
**Автор:** GroupDocs
---
```bash
Install-Package GroupDocs.Conversion -Version 25.3.0
dotnet add package GroupDocs.Conversion --version 25.3.0
using GroupDocs.Conversion;