У меня такая же проблема. Я не знаю, нашли ли вы решение, но у меня есть временное решение (потому что оно не очень эффективно):
Создайте каталог кеша для каждой таблицы, к которой вы собираетесь обращаться, и кешируйте результаты.
Всякий раз, когда вы запрашиваете эту таблицу, сохраняйте результат, используя уникальный идентификатор. Вот проблема с моим решением. Вы не можете использовать запрос в качестве идентификатора, поскольку он может быть слишком длинным, и некоторые операционные системы могут отклонить его. Поэтому я решил сохранить все запросы в другом файле вместе с автоматически увеличивающимся идентификатором, например так:
0->>SELECT * FROM table
1->>SELECT * FROM table WHERE foo = bar
Вы поняли идею. Поэтому перед выполнением запроса проверьте этот файл, чтобы увидеть, существует ли текущий запрос, если он есть, получить идентификатор и загрузить с использованием этого идентификатора. Вы можете сохранить этот файл в той же директории кэша.
- Всякий раз, когда вы обновляете, вставляете или удаляете данные в этой таблице, просто очищайте кэшированные записи следующим образом: $ cache-> clean ('all'). Вам не нужно удалять файл идентификатора, так как будут выполняться те же запросы. И если вам интересно, он будет очищать только файлы кэша в этом каталоге, следовательно, нужен каталог для каждой таблицы.
хорошо. Вам даже не нужно устанавливать время жизни (они могут существовать вечно) или автоочистку для вашего кэша, поскольку вы очищаете его каждый раз, когда запускаете обновление, вставку или удаление.
Уродливый. Любой тест, загрузка или сохранение будут выполнять два (или три, когда нам нужно сохранить новый идентификатор для нового запроса) запросов к файловой системе.
Я использовал это, и он отлично работает, используя Zend_Cache_Core и Zend_Cache_Backend_File. Я не использую полную платформу, но я использую модуль Zend_Cache, поэтому, если вы используете всю платформу, вам может понадобиться создать класс абстрактной модели, который будет создавать каталоги, файлы идентификаторов и кэшировать для ваших дочерних классов модели. (который затем расширит его).
Я видел здесь, что использование md5 может быть решением для создания файла идентификатора для каждой таблицы. Я попробую и вернусь к вам. Я не знаю, как это будет работать с Apc.