Реализация механизма кеширования данных с автоматическим удалением кеша при изменении в источнике.
Плагин доступен по адресу: http://github.com/relo-san/dinCachePlugin
1. «Умное» кеширование Николай Зык ( relo_san ) [email_address]
2.
3. Как это работает? Система правил, аналогичная роутингу. Одно правило – одна выборка. К каждому правилу можно прилинковать одну или несколько моделей. Когда в объекте, принадлежащем прилинкованной модели, происходит изменение – посылается команда на удаление кеша, соответствующего этому правилу.
4. Практическое описание одного из правил: config/cache_routing.yml: routes: static_page: type: ‘custom’ get: model: ‘DinStaticPage’ method: ‘getPageQuery‘ path: ‘:_root/DinStaticPage/static_page’ key: ‘:category_id.:uri.:_i18n.cache’ remove: default: path: ‘:_root/DinStaticPage/static_page’ key: ‘:category_id.:uri.*.cache’
5. Легенда: « static_page » - название правила « type » - тип данных: • data – запрос одного объекта по id • page – страница со списком объектов • choices – список значений, для селекта • custom – произвольная выборка • prepared – подготовленные данные Секция « get » описывает модель и метод, к которым будет осуществляться запрос.
6. Легенда: Секция « remove » описывает правила, по которым при изменении (удалении, добавлении) объекта привязанной модели, будет осуществляться удаление кеша. Ниже в этом же конфиге осуществляем привязку моделей к правилам: config/cache_routing.yml: links: DinStaticPage: [ ‘static_page’ ] DinStaticCategory: [ ‘static_page’ ,***]
7. Текущая реализация успешно работает, но ограничена работой только с файловым кешем. В ближайшем будущем плагируется добавить возможность указания драйвера для определенного правила, работа с другими кеширующими механизмами ( Memcached ) . Также планируется добавить возможность работы с Propel и произвольными источниками данных.
8. Реализация кеш-менеджера доступна в рамках опубликованного плагина, реализующего общие надстройки над фреймворком: svn://dinecat.com/dinSymfonyExtraPlugin Плагин публикуется под лицензией MIT . Я приглашаю всех, заинтересованных в разработке этого и других плагинов, к совместной работе в этом направлении.