Включение кэша для веб-приложения не является чем-то легким.
Может быть, вы уже сделали это немного ... Я рекомендую вам сначала придумать цель, основанную на бизнес-потребностях или прогнозе (например: должно принимать 1000 запросов в секунду), а затем провести надлежащее стресс-тестирование вашей системы, чтобы иметь числа перед вами. начните что-нибудь менять, а затем определите свое узкое место.
Я обычно использую инструменты профилирования, такие как HXProf (от Facebook).
Кэширование всех ваших данных для зеркалирования базы данных может быть не лучшим подходом.
Узнайте, насколько большой вы можете выделить для вашего кэша. Если ваша архитектура позволяет вам выделить 100 МБ для кэша памяти, это повлияет на ваше решение о том, что вы кэшируете и как долго вы его кэшируете.
Лучший кеш - это кешировать вечно. Но мы все знаем, что данные меняются. Вы можете начать с кэширования данных, которые часто запрашиваются и требуют наибольшего количества ресурсов для извлечения.
Всегда старайтесь убедиться, что вы не работаете над улучшением того, что принесет вам небольшое улучшение.
Без глубокого понимания вашей архитектуры кому-либо будет опасно рекомендовать стратегию кэширования, которая наилучшим образом соответствует вашим потребностям.
Может быть, вам следует вместо этого кэшировать выходные данные ваших веб-сервисов? Например, используя обратный прокси-сервер (о чем говорит @Darrel) или используя буферизацию вывода ...
Оптимизируйте запросы к базе данных, прежде чем думать о кэшировании. Убедитесь, что вы используете кэш PHP Op (например, APC) и все те вещи, которые являются стандартной практикой.
Если вы хотите кэшировать данные и предотвратить обслуживание устаревших / старых данных, хитрость заключается в том, чтобы идентифицировать ваши данные (может быть, первичный ключ?), А когда данные обновляются или удаляются, вы удаляете или обновляете кэш для этого идентификатора. .
<?php
// After inserting into DB, you can also put it in the cache
$memcache->set($userId, $userData);
// After updating or deleting the user, you update or delete the data
$memcache->delete($userId);
На многих сайтах будут отображаться устаревшие данные. Когда я нахожусь на stackoverflow, и моя репутация увеличивается, а затем я попал в чат stackoverflow, показанная репутация - моя старая репутация. Когда я приобрел репутацию 20 (репутация необходима для чата), я все еще не мог общаться в течение еще 5 минут, потому что система чата имела мои старые данные о репутации и еще не знала, что моя репутация достаточно увеличилась, чтобы позволить мне общаться. Некоторые данные могут быть устаревшими, в то время как другие типы данных никогда не должны устаревать. Учтите, что при кешировании данных.
Заключение
Ваши подходы могут быть действительными в зависимости от факторов, о которых я говорю выше. Фактически, вы можете использовать их для всех типов данных, которые вы хотите кэшировать, и для того, как долго можно показывать старые данные для них. Может быть, категории или список стран (поскольку они не часто меняются) могут быть кэшированы в течение длительного времени, в то время как репутация (или любые данные, которые постоянно изменяются для всех пользователей) должна кэшироваться только на короткий период.