Как использовать несколько кэшей в рельсах? - PullRequest
7 голосов
/ 08 апреля 2009

У меня есть приложение rails, в котором я хотел бы использовать и memcached, и кэш хранилища файлов для различных целей.

Я хочу использовать кэш хранилища файлов, чтобы хранить большое количество страниц, которые меняются не часто (некоторые вообще не изменяются) - то есть кэширование страниц, - и использовать memcached для всего остального (действия, кэширование БД и т. Д.). Причина в том, что страницы, хранящиеся в кеше хранилища файлов, вероятно, потребуют большого объема памяти, но к большинству из них будут обращаться редко.

Возможно ли это сделать или будет настройка memcached, поскольку кеш означает, что он также используется для кэширования страниц?

В качестве дополнительного вопроса, каков безопасный способ удаления страниц из кэша хранилища файлов в какой-либо форме задания cron, поскольку, похоже, нет возможности указать ttl для этого кэша. Например, команда поиска UNIX быстро найдет и удалит все старые страницы или страницы, к которым не обращались в течение длительного времени - это безопасно, если сервер приложений может потенциально попытаться обслужить одну из этих страниц одновременно (хотя это очень маловероятно)? Если нет, то каков наилучший способ сделать это.

Ответы [ 2 ]

2 голосов
/ 10 июня 2009

Если вы хотите использовать файловую систему только для кэширования страниц и memcached для кэширования действий и фрагментов, все в порядке. Кэширование страниц всегда использует файловую систему. Просто помните, что кэширование страниц обходит ваше Rails-приложение, поэтому вы не можете использовать его для страниц, содержащих контент, который меняется от пользователя к пользователю, или для страниц, доступ к которым контролируется с помощью фильтров.

Что касается удаления страниц, в Unix файл может быть удален, но на самом деле он не удаляется с диска до тех пор, пока не будут закрыты все дескрипторы открытых файлов. Если сервер приложений открыл файл для обслуживания запроса, а команда find удаляет его через доли секунды, сервер приложений неожиданно не получит сообщение об ошибке при попытке прочитать.

Вы также можете рассмотреть возможность удаления find файлов в зависимости от их последнего времени доступа вместо создания или изменения, а также использовать очиститель в приложении Rails для удаления кэшированной страницы, когда ее содержимое устарело.

2 голосов
/ 07 июня 2009

Более простым подходом может быть использование кеша http перед вашим приложением в качестве кеша страниц, а не двух хранилищ внутри рельсов. Таким образом, вы можете использовать заголовки http для управления поведением кэша, включая TTL. Эти же ограничения также будут применяться к локальным кешам браузера в качестве приятного бонуса.

Varnish примерно такой же высокой производительности, как и раньше, но потребует настройки другого движущегося элемента в вашей среде хостинга в качестве прокси. Это все еще может стоить в зависимости от того, что вы делаете.

Более простым подходом может быть Rack :: Cache , который будет легко настроить, если вы используете стоечную версию рельсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...