Есть компонент с выборкой элементов. Сделал по примеру описанному в статье http://dev.1c-bitrix.ru/community/blogs/oracle/2071.php . На сайте константа BX_COMP_MANAGED_CACHE не определена, так что встроенный управляемый кеш не используется. Мой компонент выбирает множество записей из инфоблока и на кеше компонента ставятся метки вида "element_".$item['ID']. Получается, что на выборке элементов с ID 1, 2, 3 будут стоять теги кеша element_1, element_2, element_3. Этот же компонент используется с другими параметрами и выбирает товары с ID 4, 5, 6, соответственно на этом вызове ставятся теги element_4, element_5, element_6. В init.php я прописываю событие OnAfterIBlockElementUpdate, чтобы по нему делалась очистка управляемого кеша по тегу $CACHE_MANAGER->ClearByTag("element_".$arFields['ID']); и вот тут начинаются проблемы. Основная проблема - очищается всё. Редактирую я товар с ID = 1, логично, что очищается кеш компонента, где стоит тег element_1. Но в реальности получается, что очищается кеш всех компонентов этого же инфоблока! По сути очищается кеш всех компонентов, где выборка товаров. В БД видно, что в таблице b_cache_tag исчезают все поставленные теги вида element_*.
Теперь вопрос. WTF? и как заставить управляемый кеш очищать только те кеши компонентов, где стоит нужный тег, а не все вместе? update: пока проблему удалось решить применение уникального cache_dir для каждого вызова компонента. cache_dir генерируется из cache_id и $arParams. Костыль, конечно, но, видимо, пока единственный вариант.