Теперь это проблема, когда запись обновляется, она не отображает результаты поиска, пока не истек срок действия кэша
Может быть, я что-то упустил, но обычно этокак вы хотите, чтобы кэш работал.Вы кешируете результаты, используете их для представления данных, и кеш периодически обновляется после истечения срока его действия.
Если вам необходимо постоянно обновлять кеш, вы можете явно удалить его, когда записьобновлено.Просто сотрите весь кэш результатов поиска, когда что-то будет обновлено.
Если проблема в том, что ваша нумерация страниц не синхронизирована, убедитесь, что вы также считываете данные нумерации страниц из кэша.
Удаление только файлов кэша, принадлежащих к определенной «группе»
Теоретически это достаточно просто сделать: записать файлы кэша в их собственный каталог (скорее всего, в каталог кэша по умолчанию).Когда вам нужно удалить кэш, принадлежащий этой «группе», просто удалите каталог или его содержимое.
Проблема в том, что текущие драйверы кэша Codeigniter не поддерживают эту функцию,хотя это было бы легко интегрировать.В то же время вы можете написать свой собственный драйвер, но вы можете также перегружать саму библиотеку CI_Cache
, так как интерфейс, который она предоставляет для драйверов, не очень надежен.Например, метод save()
в настоящее время выглядит следующим образом:
/**
* Cache Save
*
* @param string Unique Key
* @param mixed Data to store
* @param int Length of time (in seconds) to cache the data
*
* @return boolean true on success/false on failure
*/
public function save($id, $data, $ttl = 60)
{
return $this->{$this->_adapter}->save($id, $data, $ttl);
}
При работе только с $id, $data, $ttl
вам нужно будет выполнить что-то вроде передачи массива одному из параметров в вашем пользовательском параметре.адаптер.Что-то вроде:
$cache_data = array(
'group' => 'search_results', // Save to this cache directory
'id' => $my_id, // Standard params
'ttl' => $my_ttl,
'data' => $my_dat,
);
$this->cache->save($cache_data);
Однако, это ломается при использовании других адаптеров, и так же происходит перегрузка класса CI_Cache
для изменения интерфейса.
Я знаю, что это не вручает вамответ, но я посмотрел на это и хотел поделиться своими результатами.Возможно, вы захотите свернуть свое собственное пользовательское решение, изменить существующее решение или просто позволить кэшу истечь и обновиться в соответствии с вашим $ttl
, а не перестраивать его после каждого обновления базы данных.
Обязательно рассмотрите Решение Nico Kang отслеживания отдельного кэша $id
s, так что вы можете пропустить беспорядок, который я описал выше, и явно удалить файлы кэша, которые вам нужно обновить.