Используйте встроенный кеш запросов MySQL вместо того, чтобы поддерживать его самостоятельно.Он автоматически очистит кэшированные запросы к таблицам, когда они будут записаны.Кроме того, он работает в памяти, поэтому он должен быть очень эффективным ...
Кроме того, не просто кешируйте запросы.Попробуйте кэшировать целые сегменты приложения на разных этапах цикла рендеринга.Таким образом, вы можете разрешить MySQL кешировать запросы, затем вы кешируете каждое отдельное представление (визуализированное), каждый отдельный блок и каждую страницу.Затем вы можете выбрать, следует ли извлекать данные из кэша на основе запроса.
Например, не вошедший в систему пользователь может получить полную страницу прямо из кэша.Но вошедший в систему пользователь может не иметь возможности (из-за имени пользователя и т. Д.).Так что для него вы можете иметь возможность отображать 1/2 ваших просмотров на странице из кэша (так как они не зависят от объекта пользователя).Вы по-прежнему получаете выгоду от кэширования, но оно будет многоуровневым в зависимости от необходимости.
Если вы действительно ожидаете большого трафика, определенно стоит обратить внимание на Memcached
.Позвольте MySQL хранить ваши запросы для вас, а затем хранить все элементы пользовательского кэша в memcache ...
Редактировать: Чтобы ответить на ваши изменения:
Файловые системы могут статьмедленно, если один каталог становится большим.Пока вы «пространством имен» по каталогам (так что каждый каталог имеет только небольшую часть файлов кэша), с этой точки зрения у вас все будет в порядке.Что касается точного порога, он действительно будет зависеть от вашего оборудования и файловой системы больше, чем что-либо еще.Я знаю, что EXT3 работает довольно медленно, если в одном каталоге загружается файл (у меня есть каталоги с буквально сотнями тысяч файлов, и может потребоваться до полсекунды, чтобы просто stat()
один из файлов, не говоря уже осделать любой вид списка каталогов) ...
Но поймите, что если вы добавите другой сервер, у вас будет дублирование кэша (что не очень хорошо), или вам придетсяпереписать весь слой кешаЕсть ли причина не использовать Memcached
с самого начала?
РЕДАКТИРОВАТЬ 2: Чтобы ответить на ваше последнее изменение:
Слишком сложно позвонить.У меня есть приложение, в котором есть база данных с примерно 1,5 миллиардами строк (рост около 500 тысяч в день).Мы вообще не используем кеширование, потому что у нас нет проблем с параллелизмом.И даже если бы мы это сделали, нам было бы лучше использовать больше серверов MySQL, чем добавлять кеширование, поскольку любая форма кэша имела бы такую низкую частоту обращений, что не стоило бы времени на ее добавление.
И вот почему я так непреклонен в том, чтобы не кэшировать скорость.Всегда будет объект, который не находится в кеше.Так что, если вы попадаете на страницу с одним из этих объектов, она все равно должна быть быстрой.Как правило, я пытаюсь кэшировать все, к чему снова будет получен доступ в течение следующих нескольких минут (в любом случае я оставляю время для работы в других приложениях около 5 минут).Поэтому, если за этот промежуток времени предметы получают не более нескольких обращений или если процент попаданий очень низок (менее 90%), я не буду беспокоиться о кешировании этого предмета ....