Правильный ответ : memcached. Быстро, чисто, поддерживает несколько процессов, в наши дни очень аккуратно интегрируется с Rails. Даже не так плохо, чтобы установить, но это еще одна вещь, чтобы продолжать работать.
90% Ответ : Возможно, существует несколько процессов Rails, например, по одному для каждого монгрела. В зависимости от специфики ваших потребностей в кешировании, вполне возможно, что наличие одного кеша на монгрела не самая плохая вещь в мире. Например, предположим, что вы кэшировали результаты длительного запроса, который
- получает свежие данные каждые 8 часов
- используется при каждой загрузке страницы, 20 000 раз в день
- должен быть доступен в 4 процессах (Mongrels)
тогда вы можете отбросить эти 20 000 запросов до 12 с помощью одной строки кода
@@arbitrary_name ||= Model.find_by_stupidly_long_query(param)
Двойная метка at, символ Ruby, с которым вы, возможно, не знакомы, является глобальной переменной. || = - это обычно используемая идиома Ruby для выполнения присваивания тогда и только тогда, когда переменная в настоящий момент равна nil или иначе оценивается как false. Это будет хорошо, пока вы явно не очистите его ИЛИ до тех пор, пока процесс не прекратится, по любой причине - перезапуск сервера, явное уничтожение, что у вас.
И после того, как вы перейдете от 20 тыс. Вычислений в день к 12 примерно за 15 секунд (ОК, две минуты - вам нужно обернуть его в тривиальный блок if, в котором хранится время обновления кэша в другом глобале), вы можете обнаружите, что нет необходимости тратить дополнительные инженерные средства на его снижение до 4 в день.
На самом деле я использую это на одном из своих рабочих сайтов, чтобы кэшировать несколько дорогих запросов, которые буквально нужно оценивать только один раз в течение жизненного цикла процесса (т. Е. Они меняются только во время развертывания - я полагаю, я мог бы рассчитать результаты и записать их на диск или в БД, но зачем это делать, когда SQL может сделать работу за меня).
Вы не получаете никакого магического синтаксиса истечения, надежность довольно мала, и его нельзя разделить между процессами - но это 90% от того, что вам нужно в строке кода.