Я бы не пытался внедрить кэширование напрямую в Zend_Db.
Что если у вас есть один запрос, который вы хотите кэшировать в течение 24 часов, и один, который вы хотите кэшировать только в течение 60 секунд? Как / где вы контролируете это? Также вам понадобится логика, чтобы убедиться, что она кэширует только запросы SELECT, в противном случае вы теряете место в кеше.
Я бы просто использовал Zend_Cache, используя адаптер по вашему выбору (libmemcached / apc / xcache для лучшей производительности), и обрабатывал бы кэширование в вашем приложении или классах доступа к данным.
Вы можете использовать хеш самого запроса в качестве ключа кэша или, в зависимости от данных запроса, создавать хеш-функции для конкретных запросов, которые легче идентифицировать. Например, если у вас есть запрос, который просто извлекает данные учетной записи пользователя из базы данных, ключ кэша может выглядеть примерно так: userInfoQuery:1234
, где 1234 - идентификатор пользователя.
The query cache does not return stale data. When tables are modified, any relevant entries in the query cache are flushed.
Таким образом, если ваши таблицы изменяются в результате вставки / обновления / удаления, кэш запросов очищается. Если таблицы часто меняются, то кеш запросов не очень полезен, потому что он недолговечный.
Еще одна распространенная вещь, которую вы должны сделать в рабочей среде для Zend_Db, - это кэшировать метаданные таблицы. Как вы, наверное, заметили, Zend выдает запросы DESCRIBE до запросов insert (), find () или info (). Использование мета-кэша таблицы может устранить эти запросы. Инструкции о том, как это сделать, см. В метаданных кэшируемой таблицы .