Кеш для запросов Cakephp

Я хочу реализовать функцию кеша для cakephp 2.5.3, связанную с поиском запросов, но я хочу сделать кеш недействительным для всех событий, связанных с таблицами (update, delete, …).
Я закодировал это в AppModel.php, можете ли вы сказать мне, что вы думаете о логике и эффективности кода?
Благодарю.

public function find($conditions = null, $fields = array(), $order = null, $recursive = null) {
$keyName = sha1(serialize(func_get_args()));
if (Cache::read($this->table . '_' . $keyName, '5m') !== false) {
$this->log('read cache ' . $this->table . '_' . $keyName);

return Cache::read($this->table . '_' . $keyName, '5m');
} else {

$data = parent::find($conditions, $fields, $order, $recursive);
Cache::write($this->table . '_' . $keyName, $data, '5m');
$this->addToCacheList($keyName);
$this->log('add ' . $this->table . '_' . $keyName);

return $data;
}
}

public function afterSave($created, $options = array()) {

$this->flushCacheList();

parent::afterSave($created, $options);
}

public function afterDelete() {

$this->flushCacheList();

parent::afterDelete();
}

public function addToCacheList($keyName) {
if (Cache::read($this->table, '5m') !== false) {
$values = Cache::read($this->table, '5m');
$values[] = $keyName;
} else {
$values = array($keyName);
}

Cache::write($this->table, $values, '5m');
}

public function flushCacheList() {
if (Cache::read($this->table, '5m')) {
$values = Cache::read($this->table, '5m');
foreach($values AS $value) {
Cache::delete($this->table . '_' . $value, '5m');
$this->log('flush ' . $this->table . '_' . $value);
}
Cache::delete($this->table, '5m');
}
}

0

Решение

CakePHP уже есть встроенный кеш запросов.

Что вы думаете о логике кода и эффективности?

Я не уверен, но я думаю, что вы слишком часто очищаете кеш, чтобы быть эффективными.

Не думай о производительности эталонный тест Это. Единственный надежный способ — это эталонный тест.

Но я бы сказал вместо этого кешируйте результаты запросов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector