Удалить файл, найденный в папке композитного кэша

Обновлено: 30.06.2024

В этом руководстве вы узнаете, как включить кэширование данных приложения в любом управляемом компоненте CDI вашего приложения Quarkus.

Эта технология считается предварительной.

В предварительной версии обратная совместимость и присутствие в экосистеме не гарантируется. Конкретные улучшения могут потребовать изменения конфигурации или API, и в настоящее время разрабатываются планы по обеспечению стабильной работы. Ждем ваших отзывов в нашем списке рассылки или в виде сообщений о проблемах в нашем трекере GitHub.

Полный список возможных статусов можно найти в разделе часто задаваемых вопросов.

Предпосылки

Чтобы выполнить это руководство, вам необходимо:

Примерно 15 минут

JDK 11+ установлен с правильно настроенным JAVA_HOME

Apache Maven 3.8.1+

Дополнительно Quarkus CLI, если вы хотите его использовать

При необходимости Mandrel или GraalVM должны быть установлены и настроены соответствующим образом, если вы хотите создать собственный исполняемый файл (или Docker, если вы используете собственную сборку контейнера)

Сценарий

Представьте, что вы хотите предоставить в своем приложении Quarkus REST API, который позволяет пользователям получать прогноз погоды на следующие три дня. Проблема в том, что вам приходится полагаться на внешнюю метеорологическую службу, которая принимает запросы только на один день и отвечает вечно. Поскольку прогноз погоды обновляется каждые двенадцать часов, кеширование ответов службы определенно улучшит производительность вашего API.

Мы сделаем это с помощью одной аннотации Quarkus.

Решение

Мы рекомендуем следовать инструкциям в следующих разделах и создавать приложение шаг за шагом. Однако вы можете сразу перейти к завершенному примеру.

Решение находится в каталоге cache-quickstart.

Создание проекта Maven

Сначала нам нужно создать новый проект Quarkus с помощью следующей команды:

Чтобы создать проект Gradle, добавьте параметр --gradle или --gradle-kotlin-dsl.

Дополнительную информацию об установке и использовании Quarkus CLI см. в руководстве Quarkus CLI.

Чтобы создать проект Gradle, добавьте параметр -DbuildTool=gradle или -DbuildTool=gradle-kotlin-dsl.

Эта команда создает проект и импортирует расширения cache и resteasy-jackson.

Если у вас уже настроен проект Quarkus, вы можете добавить расширение кеша в свой проект, выполнив следующую команду в базовом каталоге проекта:

Это добавит в файл сборки следующее:

Создание REST API

Давайте начнем с создания службы, которая будет имитировать очень медленный вызов внешней метеорологической службы. Создайте файл src/main/java/org/acme/cache/WeatherForecastService.java со следующим содержимым:

Нам также нужен класс, который будет содержать ответ, отправляемый пользователям, когда они запрашивают прогноз погоды на следующие три дня. Создайте src/main/java/org/acme/cache/WeatherForecast.java следующим образом:

Теперь нам просто нужно создать ресурс REST. Создайте файл src/main/java/org/acme/cache/WeatherForecastResource.java со следующим содержимым:

1 Если параметр запроса daysInFuture опущен, трехдневный прогноз погоды будет начинаться с текущего дня. В противном случае он начнется с текущего дня плюс значение daysInFuture.

Все готово! Давайте проверим, все ли работает.

Сначала запустите приложение в режиме разработки из каталога проекта:

Содержание ответа может различаться в зависимости от дня запуска кода.

Вы можете пытаться звонить по одному и тому же URL снова и снова, ответ всегда будет занимать шесть секунд.

Включение кеша

Теперь, когда ваше приложение Quarkus настроено и работает, давайте значительно улучшим его время отклика, кэшируя ответы внешней метеорологической службы. Обновите класс WeatherForecastService следующим образом:

1 Мы добавили только эту аннотацию (и, конечно, связанный с ней импорт).

Подождите секунду! Сервер сам перезапустился после обновления WeatherForecastService? Да, это одна из замечательных функций Quarkus для разработчиков, называемая живым кодированием.

Теперь, когда кеш был загружен во время предыдущего вызова, попробуйте вызвать тот же URL. На этот раз вы должны получить очень быстрый ответ со значением executeTimeInMs, близким к 0.

Вы также можете попробовать позвонить по тому же URL с другим городом и снова увидеть кеш в действии. Первый вызов займет шесть секунд, а на последующие ответят немедленно.

Поздравляем! Вы только что добавили кэширование данных приложения в свое приложение Quarkus с помощью одной строки кода!

Хотите узнать больше о возможностях кэширования данных приложения Quarkus? Следующие разделы покажут вам все, что нужно знать об этом.

Кэширование с использованием аннотаций

Quarkus предлагает набор аннотаций, которые можно использовать в управляемом компоненте CDI для включения возможностей кэширования.

Кэширование аннотаций не допускается для закрытых методов. Они будут нормально работать с любым другим модификатором доступа, включая package-private (без явного модификатора).

@CacheResult

Загружает результат метода из кеша, по возможности не выполняя тело метода.

Когда вызывается метод с аннотацией @CacheResult, Quarkus вычисляет ключ кэша и использует его для проверки в кэше, был ли уже вызван метод. Если метод имеет один или несколько аргументов, вычисление ключа выполняется из всех аргументов метода, если ни один из них не аннотирован @CacheKey , или из всех аргументов, аннотированных @CacheKey в противном случае. Каждый не-примитивный аргумент метода, являющийся частью ключа, должен правильно реализовывать equals() и hashCode(), чтобы кеш работал должным образом. Эту аннотацию также можно использовать в методе без аргументов, в этом случае используется ключ по умолчанию, полученный из имени кеша. Если значение найдено в кеше, оно возвращается, и аннотированный метод фактически никогда не выполняется. Если значение не найдено, вызывается аннотированный метод, и возвращаемое значение сохраняется в кеше с использованием вычисленного ключа.

Метод с аннотацией CacheResult защищен механизмом блокировки на случай промаха кеша. Если несколько одновременных вызовов попытаются получить значение кэша из одного и того же отсутствующего ключа, метод будет вызван только один раз. Первый параллельный вызов инициирует вызов метода, в то время как последующие параллельные вызовы будут ждать окончания вызова метода, чтобы получить кешированный результат. Параметр lockTimeout можно использовать для прерывания блокировки после заданной задержки. Тайм-аут блокировки отключен по умолчанию, то есть блокировка никогда не прерывается. Дополнительные сведения см. в документации по параметру Javadoc.

Эту аннотацию нельзя использовать для метода, возвращающего void .

Quarkus также может кэшировать нулевые значения, в отличие от базового поставщика Caffeine. Дополнительные сведения по этой теме см. ниже.

@CacheInvalidate

Удаляет запись из кеша.

Когда вызывается метод с аннотацией @CacheInvalidate, Quarkus вычисляет ключ кэша и использует его, чтобы попытаться удалить существующую запись из кэша. Если метод имеет один или несколько аргументов, вычисление ключа выполняется из всех аргументов метода, если ни один из них не аннотирован @CacheKey , или из всех аргументов, аннотированных @CacheKey в противном случае. Эту аннотацию также можно использовать в методе без аргументов, в этом случае используется ключ по умолчанию, полученный из имени кеша. Если ключ не идентифицирует какую-либо запись кэша, ничего не произойдет.

@CacheInvalidateAll

При вызове метода с аннотацией @CacheInvalidateAll Quarkus удалит все записи из кэша.

@CacheKey

Если аргумент метода помечен @CacheKey , он идентифицируется как часть ключа кэша во время вызова метода, помеченного @CacheResult или @CacheInvalidate .

Эта аннотация является необязательной и должна использоваться только в том случае, если некоторые аргументы метода НЕ являются частью ключа кеша.

Логика построения составного кеша

Когда ключ кэша создается из нескольких аргументов метода, независимо от того, указаны ли они явно с помощью @CacheKey или нет, логика построения зависит от порядка этих аргументов в сигнатуре метода. С другой стороны, имена аргументов вообще не используются и не влияют на ключ кэша.

< td>2 < td>Вызов этого метода сделает недействительными значения, кэшированные методом загрузки, потому что порядок ключевых элементов такой же.
1 Вызов этого метода сделает недействительными значения, кэшированные методом загрузки, даже если имена ключевых элементов были заменены местами.
Вызов этого метода НЕ БУДЕТ аннулировать значения, кэшированные методом загрузки, поскольку порядок ключевых элементов другой.
3
4 Вызов этого метода НЕ сделает недействительным значения, кэшированные методом загрузки, поскольку порядок ключевых элементов отличается.

Кэширование с помощью программного API

Quarkus также предлагает программный API, который можно использовать для хранения, извлечения или удаления значений из любого кеша, объявленного с помощью API аннотаций. Все операции программного API не блокируются и зависят от Mutiny.

Перед программным доступом к кэшированным данным необходимо получить экземпляр io.quarkus.cache.Cache. В следующих разделах показано, как это сделать.

Вставка кеша с аннотацией @CacheName

io.quarkus.cache.CacheName можно использовать в поле, параметре конструктора или параметре метода для внедрения кэша:

1 Это необязательно.
2 Этот метод возвращает тип Uni, который является неблокирующим.
3 Аргумент k содержит значение ключа кэша.
4 Если вам не нужно, чтобы вызов был неблокирующим, вот как вы можете получить значение кэша блокирующим способом.

Получение кеша из CacheManager

Другой способ получить экземпляр Cache состоит в том, чтобы сначала внедрить io.quarkus.cache.CacheManager, а затем получить нужный Cache по его имени:

Создание программного ключа кэша

Прежде чем создавать программный ключ кеша, вам нужно знать, как ключи кеша создаются с помощью API аннотаций при вызове аннотированного метода:

Если метод не имеет аргументов, то ключ кеша является экземпляром io.quarkus.cache.DefaultCacheKey, созданным из имени кеша.

Если у метода ровно один аргумент, то этот аргумент является ключом кеша.

Если метод имеет несколько аргументов, но только один из них снабжен аннотацией @CacheKey , то этот аннотированный аргумент является ключом кеша.

Теперь, если вы хотите получить или удалить с помощью программного API значение кеша, которое было сохранено с помощью API аннотаций, вам просто нужно убедиться, что один и тот же ключ используется с обоими API.

Получение всех ключей из CaffeineCache

Ключи кэша из определенного CaffeineCache можно получить как неизменяемый набор, как показано ниже. Если записи кэша будут изменены во время выполнения итерации по набору, набор останется неизменным.

Настройка базового поставщика кэширования

Это расширение использует Caffeine в качестве базового поставщика кэширования. Caffeine — это высокопроизводительная библиотека кэширования, близкая к оптимальной.

Свойства конфигурации кофеина

Каждый из кэшей Caffeine, поддерживающих расширение кэширования данных приложения Quarkus, можно настроить с помощью следующих свойств в файле application.properties. По умолчанию кэши не выполняют никакого вытеснения, если они не настроены.

Вам необходимо заменить имя-кеша во всех следующих свойствах реальным именем кеша, который вы хотите настроить.

Свойство конфигурации фиксируется во время сборки — все остальные свойства конфигурации можно переопределить во время выполнения

У нас есть 2 удаленных офиса, в которых мы тоже не можем развернуть программное обеспечение. Я отправил пакет в эти 2 офиса, и ничего не работает. Пакет копируется в папку c:\windows\system32\ccm\cache, но не запускается. Удалил Рекламу и кеш не очищает. Я постоянно вижу это в файлах CAS.log

Ошибка: DeleteDirectory: - Не удалось удалить каталог C:\WINDOWS\system32\CCM\Cache\BO10007E.2.System с ошибкой 0x00000002.

почему кеш не удаляет файлы?

И что заставляет клиент хранить файлы в папке кеша, но никогда их не запускать?

Ответы

Клиент может получить информацию из AD. Если AD чист, он никогда не перейдет на СТАРЫЙ сервер SMS, если вообще сервер SCCM недоступен.

Ануп Си Наир – Твиттер @anoopmannur

Эта публикация предоставляется КАК ЕСТЬ, без каких-либо гарантий и прав.

Все ответы

Я нашел сценарий .vbs, который очищает кеш в системе. Вопрос: Если вы удалите все, что находится в кеше, это приведет к автоматическому повторному запуску обязательных рекламных объявлений?

Удаление содержимого кеша CCM не должно приводить к повторному запуску чего-либо, так как история выполнения машины там не хранится, а это то, что локально имеет отношение к поведению повторного запуска. Вы можете просмотреть его в реестре (по умолчанию HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Mobile Client\Software Distribution\Execution History на машинах x86)

Я отправил пакет для запуска из DP, но все еще получаю это сообщение о состоянии на каждой отдельной целевой машине, и он никогда не запускается.

Программа для рекламы "BO1200B0 еще не запущена, так как не получен контент для пакета "BO10008F" - "Очистить кэш" (версия 1). Возможная причина: Контент для этой программы должен быть загружен в компьютер. кэш или содержимое не может быть найдено.
Решение. Если программа загружается, никаких действий не требуется. Программа запустится после успешного завершения загрузки. Если содержимое не может быть найдено, убедитесь, что точка распространения с этим содержимым доступна для этого компьютера.На доступность точки распространения может влиять конфигурация границ роуминга, которая используется для определения того, классифицируются ли точки распространения как локальные или удаленные, или путем включения точек распространения в качестве защищенных точек распространения.Доступность точки распространения также может быть затронуто, если вы используете филиальные точки распространения, а объявление настроено с параметром «Запустить программу из точки распространения» вместо «Загрузить». d из точки распространения и запустить локально. Это связано с тем, что точки распространения филиалов не поддерживают объявления, настроенные для запуска непосредственно из точки распространения.

Зачем мне получать это на каждой машине, на которую оно было отправлено, если оно должно запускаться из DP?

Я бы посоветовал вам получить более подробную информацию об ошибке из файла execmgr.log или cas.log. не думаю, удалив кеш

Ануп Си Наир – Твиттер @anoopmannur

Эта публикация предоставляется КАК ЕСТЬ, без каких-либо гарантий и прав.

В execmgr.log нет ошибок. Вот последняя строка этого файла.

Запрос на выполнение для программы очистки кэша пакета NA10008F изменяется с NotExist на WaitingContent

В cas.log есть ошибки, когда я пытался удалить рекламу.

Ошибка: DeleteDirectory: - Не удалось удалить каталог C:\WINDOWS\system32\CCM\Cache\BO10007E.3.System с ошибкой 0x00000002.

Ошибка 0x000000002 при просмотре указала мне на vbscript, удаляющий кеш. Но моя программа очистки кеша тоже не запускается, хотя она настроена на запуск из DP.

Все машины на удаленных сайтах получают одну и ту же ошибку для этой рекламы? Или только эта машина/

Надеюсь, вы уже пробовали удалять кеш вручную?

у вас нет других ошибок в журнале событий?

Ануп Си Наир – Твиттер @anoopmannur

Эта публикация предоставляется КАК ЕСТЬ, без каких-либо гарантий и прав.

Других ошибок нет, и на всех машинах одна и та же ошибка. У них медленное соединение, поэтому я задаюсь вопросом, является ли это проблемой. Граница сайта настроена на медленную связь. Существует много машин, поэтому удаление вручную займет много времени из-за большого количества машин и медленного соединения.

Ошибка: DeleteDirectory: - Не удалось удалить каталог C:\WINDOWS\system32\CCM\Cache\BO10007E.3.System с ошибкой 0x00000002.

Ошибка 0x000000002 при поиске указал мне на vbscript, который удаляет кеш. Но моя программа очистки кеша тоже не запускается, хотя она настроена на запуск из DP.

Я удалил все объявления из консоли SCCM, которые были назначены моим проблемным коллекциям. Затем я создал новое объявление для пакета Null Deploy. Каждая отдельная машина получает одно и то же сообщение о состоянии.

Я развернул этот Null Package 2 разными способами, и в обоих случаях возникала одна и та же проблема. Я запустил его из DP и сказал SCCM загрузить пакет, а затем запустить его.

И, конечно же. если я развертываю любую другую коллекцию, все работает нормально, проблема возникает только в этих двух коллекциях.

В exemgr.log это повторяется снова и снова


В журнале Cas.log говорится следующее:

Выпуск запроса контента ContentAccess 31.08.2011 17:38:10 3412 (0x0D54)
Отмена задания CTM для контента BO10000A.3 ContentAccess 31.08.2011 17:38:10 3412 (0x0D54)
Ошибка: DeleteDirectory: - Не удалось удалить каталог C:\WINDOWS\system32\CCM\Cache\BO10000A.3.System с ошибкой 0x00000002. ContentAccess 31.08.2011 17:38:10 3412 (0x0D54)
Запрос содержимого BO10000A.3, размер (КБ) 126, в контексте Система с приоритетом Низкий ContentAccess 31.08.2011 17:38:10 2620 (0x0A3C)
Отправлено задание CTM для загрузки содержимого BO10000A.3 в контексте System ContentAccess 31.08.2011 17:38:10 2620 (0x0A3C)
Успешно создан запрос на загрузку содержимого BO10000A.3 ContentAccess 31.08.2011 17:38:10 2620 (0x0A3C)

Как дисковый кэш в After Effects помогает вашему рабочему процессу.

Возможно, вы слышали или не слышали о дисковом кеше в After Effects, но вскоре вы узнаете, что дисковый кеш играет огромную роль в After Effects. На самом деле это не просто крупная сделка, это крупная сделка и важная часть вашего рабочего процесса.

Знаете вы это или нет, но вы используете дисковый кеш столько же, сколько и After Effects. Кэш диска — настолько важная часть процесса моушн-дизайна, что мы подумали, что было бы полезно поговорить о том, что такое кеш диска и как он может помочь вам в After Effects.

Что такое кэш диска?

С технической точки зрения дисковый кэш — это не просто функция After Effects, он гораздо шире, поскольку в большинстве программ используется тот или иной тип дискового кэширования. По сути, дисковый кеш означает, что программное обеспечение хранит данные, которые были недавно прочитаны, и сохраняет их в кеше, поэтому, когда ему нужно прочитать их снова, оно может сделать это быстрее.

Как работает дисковый кэш в After Effects?

Когда вы создаете композицию, After Effects сохраняет отрендеренные кадры и изображения с помощью предварительного просмотра в ОЗУ, что упрощает настройку и редактирование композиции. AE не будет кэшировать кадры, которые можно легко отобразить, такие как сплошные цвета или текст, а только кадры, в которых были созданы композиты, и необходим предварительный просмотр. Теперь есть два способа, которыми AE выполняет предварительный рендеринг и кэширование вашей композиции. Давайте посмотрим на оба.

ДИСКОВЫЙ КЭШ

Дисковой кеш, как мы упоминали выше, где данные предварительного рендеринга хранятся в каталоге кеша. Это позволяет After Effects быстрее считывать данные, что обеспечивает более быстрый предварительный просмотр.Вы можете увидеть, что ваша композиция была кэширована на диск, по синей полосе на шкале времени временной шкалы.

AE Disk Cache 2 Blue Bar.jpg< бр />

КЭШ ОЗУ (ОПЕРАТИВНАЯ ПАМЯТЬ)

After Effects кэширует кадры предварительного просмотра RAM в своем кэше RAM точно так же, как кэширует данные на диск. Это опять-таки способ повышения производительности After Effects для пользователя за счет отсутствия необходимости повторного рендеринга композиции каждый раз, когда вы нажимаете пробел. Вы можете увидеть, как работает кэш RAM, найдя зеленую полосу на линейке времени временной шкалы. При предварительном просмотре временной шкалы After Effects перемещает все необходимые кадры из кэша диска в кэш ОЗУ для воспроизведения.

AE Disk Cache 3 Green Bar.jpg< бр />

Использует ли дисковый кэш и оперативный кэш место на жестком диске?

Подобно тому, что оба будут использовать место на вашем компьютере. Однако предварительный просмотр из ОЗУ будет сохранен в ОЗУ и будет стерт при закрытии After Effects. Дисковый кэш будет храниться на вашем жестком диске и не будет удален при закрытии программы.

Вы также должны учитывать, что со временем ваш кеш может стать довольно большим и занимать много места на вашем жестком диске. Тем не менее, не беспокойтесь, вы можете все исправить и очистить вашу систему от используемого дискового пространства.

КАК ОТРЕГУЛИРОВАТЬ РАЗМЕР ДИСКОВОГО КЭША

Чтобы узнать, сколько места занимает кэш на диске, выберите After Effects > «Настройки» > «Медиа и кэш диска». В меню вы можете изменить потенциальный размер дискового кеша. Если вы часто используете After Effects, вы можете увеличить это число до нужного вам значения. After Effects рекомендует использовать SSD на жестком диске, отдельном от отснятого материала.

КАК ОЧИСТИТЬ КЭШ ДИСКА В AFTER EFFECTS

Есть два способа очистить кэш диска. Во-первых, перейдите в «Правка»> «Очистить»> «Вся память и дисковый кэш». Просто имейте в виду, что это также очистит ваш кеш RAM. Второй вариант — перейти в «Настройки»> «Медиа и дисковый кэш». Здесь вы найдете опцию «Очистить кэш диска».

КАК ОЧИСТИТЬ КЭШ ОЗУ В After Effects

Если вам нужно очистить кэш RAM перед выходом из After Effects, выберите «Правка» > «Очистить» > «Вся память». Это позаботится о кэше RAM, но имейте в виду, что вы потеряете прогресс предварительного просмотра, и вам нужно будет снова запустить предварительный просмотр RAM.

ТАК. ЭТА ИНФОРМАЦИЯ ДЕЙСТВИТЕЛЬНО ПОМОЖЕТ МНЕ?

Чтобы стать отличным дизайнером в After Effects, важно работать эффективно и быстро. Один из способов, с помощью которого вы можете сосредоточиться на создании материала, а не ждать, пока ваш компьютер отобразит его, – это использовать дисковый кэш и предварительный просмотр RAM в своих интересах.

Недавно я получил несколько писем от людей, у которых возникли проблемы с iTunes, из-за которых обложка альбома отображалась некорректно. Есть простой трюк, который может решить эти проблемы: он включает удаление папки кеша, которую iTunes хранит на вашем компьютере, чтобы ускорить отображение обложек альбомов.

При просмотре файлов в iTunes приложение проверяет, есть ли обложки альбомов, встроенные в файлы или загруженные отдельно (для приобретенных файлов). Если это так, он создает кеш-файл обложки, поэтому ему не нужно читать музыкальные файлы каждый раз, когда он их отображает. Я обнаружил, что когда у меня возникают проблемы с отображением обложек альбомов неправильно или вообще не отображаются, удаление этой папки, хранящейся в папке iTunes, решает их.

Папка находится в ~/Music/iTunes/Album Artwork; это папка iTunes в папке «Музыка» в вашей домашней папке (с вашим именем пользователя и значком домика):

Папка с обложками альбомов iTunes

Удалите папку «Кэш», очистите корзину, закройте iTunes и перезапустите его. Вы заметите, что iTunes немного отстает при отображении большого количества контента; как я уже сказал выше, он должен извлечь обложку из файлов, а это занимает немного времени. Но со временем кеш будет перестроен, и это может исправить некоторые проблемы с некорректным отображением обложек альбомов.

Не удаляйте другие папки; они содержат обложки для купленных треков, где обложки не встроены в файлы или другие элементы в облаке.

Если вы часто добавляете музыку или другой контент в свою медиатеку iTunes и удаляете ее, я бы рекомендовал время от времени удалять эту папку, хотя бы для экономии места. Он будет содержать файлы кеша для элементов, которые вы удалили, и, как вы можете видеть выше, он может занимать много места. У меня больше 4.5 ГБ для библиотеки примерно из 70 000 элементов.

Примечание: как отметил один комментатор, удаление этой папки решило проблему, из-за которой iTunes запускался медленно. Я не думал, что это может иметь другие последствия для iTunes, поэтому, если у вас есть какие-либо проблемы с медленной работой iTunes, вы можете попробовать удалить папку. Это не может повредить; как я сказал выше, iTunes просто воссоздает файлы кеша.

Читайте также: