Ответ 1
Из руководства по кэшированию рельсов относительно memory_store
:
В этом хранилище кешей хранятся записи в памяти в том же процессе Ruby.
Вы ожидаете, что это будет довольно чертовски быстро для некоторых тестов. Он не должен прилагать никаких усилий для чтения или записи из любого другого хранилища. Кэшированные вещи находятся там, где это необходимо.
Однако вы не можете хранить слишком много информации, как до того, как она станет громоздкой. Процессы для вашего сервера будут расти, и ваш кеш будет очень быстро избавляться от самой старой кешированной информации (размер по умолчанию этого кеша - 32 МБ).
Кроме того, при выполнении нескольких процессов, как и для производственного сервера, вы будете дублировать кешированную информацию в каждом процессе. Например, если ваша домашняя страница кэширована, вам нужно будет кэшировать ее для каждого из процессов, которые выполняются на сервере.
У вас также будут проблемы с истечением срока действия вручную из кеша, который находится внутри серверных процессов, потому что вам необходимо либо взаимодействовать со всеми запущенными процессами, чтобы истечь кешированную информацию, либо получить их, чтобы проверить, не является ли эта информация устаревшей до доступа он.
Используя что-то вроде memcached или redis, вы можете иметь все процессы вашего сервера, обращаясь к одному и тому же кешу, и у вас может быть гораздо больший кеш, который означает, что кешированная информация становится устаревшей намного реже. Вы можете написать один раз в кэш, и все процессы сервера будут полезны, и вы можете очистить один раз, и все процессы узнают, что он очищен.
Как вы уже определили, компромисс - это производительность записи и чтения из кеша, но в системе любого размера, которую компромисс производительности не стоит, по сравнению с более сложным кэшированием магазин.