Yii рдореЗрдВ, рдХреИрд╢ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП
рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рджрд╛рди
рдХреА рдЬрд╛рддреА рд╣реИред рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВред рдореИрдВ рдХреИрд╢ рдХреЛ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рддрд╛рдХрд┐ рдЬрдм рдЖрдк рдХрд┐рд╕реА рднреА рдЯреИрдЧ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рддреЛ рдЗрд╕ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╕рдВрдкреВрд░реНрдг рдХреИрд╢ рдкреБрд░рд╛рдирд╛ рд╣реЛ рдЬрд╛рдПред
Googling рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд▓реЗрдЦ рдорд┐рд▓реЗ:
рдкрд╣рд▓рд╛ рд▓реЗрдЦ рдПрдХрд▓ рдЯреИрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдЯреИрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрдгрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдп рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рднрд╛рд╡ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рднреА рдЯреИрдЧ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬреАрд╡рд┐рдд рд░рд╣реЗрдЧрд╛, рдЗрд╕ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рддреБрдЪреНрдЫ рд▓рдЧрддрд╛ рд╣реИред
рдЙрдкрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рдиреЗ рдкрд░, рдореИрдВрдиреЗ
Dklab_Cache_Backend_TagEmuWrapper рдкрд░
YI рдХреА рд╢реИрд▓реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░
рдЕрдкрдирд╛ рд▓рд┐рдЦрд╛ред
рдореИрдВ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ рддреИрдпрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдХрд┐рд╕реА рднреА рдореВрд▓реНрдп (рд▓реЗрдХрд┐рди рдЬрд░реВрд░реА рдирд╣реАрдВ) рдХреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдЯреИрдЧ рд╣рдЯрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
- рдЬрдм рдХреЛрдИ рдЯреИрдЧ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╕рдВрдкреВрд░реНрдг рдХреИрд╢ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
- рдЯреИрдЧ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред
- рдЯреИрдЧ рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде, рдЙрди рдЯреИрдЧреЛрдВ рдХреА рд╕реВрдЪреА, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдпрд╣ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред
- рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЙрди рд╕рднреА рдЯреИрдЧ рдХреЛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдЬреЛ рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЯреИрдЧ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ
рдореИрдВ рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЕрдВрддрд┐рдо рддреАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдХреБрдВрдЬреА "рдХреБрдВрдЬреА" рдФрд░ рдорд╛рди "рдорд╛рди" рдХреЗ рд╕рд╛рде рдХреИрд╢ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЛ "рдЯреИрдЧ", "рдЯреИрдЧрдмреА" рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
$dependency = new \Cache\Tagged\Dependency(array('tagA', 'tagB')); Yii::app()->cache->set('key', 'value', 0, $dependency);
рдЙрд╕реА рд╕рдордп, рддреАрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдХреИрд╢ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИрдВ:
- 'рдХреБрдВрдЬреА' => рд╕рд░рдгреА (рд╕рд░рдгреА ('рдЯреИрдЧрдЕ' => рд╕рдВрд╕реНрдХрд░рдг ('рдЯреИрдЧрдП'), 'рдЯреИрдЧрдмреА' => рд╕рдВрд╕реНрдХрд░рдг ('рдЯреИрдЧрдмреА')), 'рдореВрд▓реНрдп')
- 'tagA' => рд╕рдВрд╕реНрдХрд░рдг ('tagA')
- 'tagB' => рд╕рдВрд╕реНрдХрд░рдг ('tagB')
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Yii рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗред (рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╣рд╛рдБ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдкрд╛рда рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред)
рдЕрдм рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рдХреИрд╢ рдПрдВрдЯреНрд░реА рдкрдврд╝реАред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо рдЙрдард╛рдП рдЧрдП рд╣реИрдВ:
- рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдЪрд┐рдкрдХреЗ рдЯреИрдЧ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ
- рдХреИрд╢ рд╕реЗ рдкрдврд╝реЗ рдЧрдП рдЯреИрдЧ рдХреА рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдЯреИрдЧ рдХреА рдкреНрд░рддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
- рдпрджрд┐ рдЯреИрдЧ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╢ рдкреБрд░рд╛рдирд╛ рд╣реИ
рдпрд╣ рдХрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
namespace Cache\Tagged; class Dependency implements \ICacheDependency {
рдФрд░ рдЗрд╕ рд▓рдд рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ
namespace Cache\Tagged; class Helper { const VERSION = "0.01"; static private $_cache = null; static public function init(\ICache $cacheId = null) { if ($cacheId === null) { if (self::$_cache !== null) { return true; }
рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рдЙрдкрдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
Yii::setPathOfAlias('Cache', $basepath . DIRECTORY_SEPARATOR . 'components/cache');
рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╕рдВрдкреВрд░реНрдг рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ CActiveRecord рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЛ рдХреИрд╢ рдХрд░реЗрдВрдЧреЗред (рдЖрдкрдХреЛ рдХрд╣реАрдВ рдирдИ рдХрдХреНрд╖рд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд / рдШрдЯрдХ / ActiveRecord.php рдмрдирд╛рдПрдБ:
class ActiveRecord extends CActiveRecord { // const CACHE_DURATION = 0; protected function beforeFind() { $tags = array($this->tableName()); $this->cache(self::CACHE_DURATION, new \Cache\Tagged\Dependency(array($tags))); parent::beforeFind(); } protected function afterSave() { \Cache\Tagged\Helper::deleteByTags($this->tableName()); parent::afterSave(); } protected function afterDelete() { \Cache\Tagged\Helper::deleteByTags($this->tableName()); parent::afterDelete(); } }
рд╣рдо рдЗрд╕реЗ CActiveRecord рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рдХрдореА рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ