Правильный ответ: memcached. Быстрая, чистая, поддерживает несколько процессов, сегодня очень с Rails. Даже это плохо настроить, но это еще одна вещь, чтобы продолжать работать.
90% Ответ: Есть, вероятно, несколько процессов Rails, работающих вокруг - по одному для каждого Mongrel у вас есть, например. В зависимости от специфики ваших потребностей в кешировании вполне возможно, что наличие одного кеша на Mongrel не самое худшее в мире. Например, предположим, что вы кэшировать результаты длительных запросов, которые
- получает свежие данные каждые 8 часов
- используется на каждой странице нагрузки, 20000 раз в день
- должен быть доступен в 4 процессы (дворняжек)
, то вы можете упасть, что 20000 запросов до 12 с примерно одной строки кода
@@arbitrary_name ||= Model.find_by_stupidly_long_query(param)
Двойной знак at, символ Ruby, которым вы, возможно, не знакомы, является глобальной переменной. || = - обычно используемая идиома Ruby для выполнения назначения тогда и только тогда, когда переменная в настоящее время равна нулю или иначе вычисляется как false. Он будет оставаться хорошим до тех пор, пока вы явно не очистите его ИЛИ пока процесс не прекратится, по какой-либо причине - перезагрузка сервера, явно убитая, что у вас есть.
И после того, как вы спуститесь с 20 тыс. Вычислений на день до 12 примерно за 15 секунд (ОК, две минуты - вам нужно обернуть его в тривиальный блок, в котором хранится время обновления кеша в другом глобальном), вы может показаться, что нет необходимости тратить дополнительные инженерные активы на то, чтобы довести их до 4 в день.
Я на самом деле использую это на одном из своих производственных сайтов для кэширования нескольких дорогостоящих запросов, которые буквально нужно оценивать только один раз в жизни процесса (т. Е. Они меняются только во время развертывания - я полагаю, что я мог бы сделать предварительный расчет результаты и записывать их на диск или DB, но зачем это делать, когда SQL может выполнить эту работу для меня).
Вы не получите никакого синтаксиса истечения срока действия, надежность довольно тонкая, и ее нельзя использовать для разных процессов, но ее 90% того, что вам нужно в строке кода.
В режиме разработки это не работает. Ваша глобальная переменная будет сброшена при каждом вызове контроллера. Наверное, из-за архитектуры rails memcached - единственный способ. :-( – TraderJoeChicago 2010-04-28 21:05:31