Почему Rails.cache не является потокобезопасным? - PullRequest
2 голосов
/ 18 июня 2010

Я знаю, Rails.cache это ActiveSupport::Cache::MemoryStore, и это не потокобезопасно.

Не понимаю, почему рельсы используют поточно-небезопасный кеш по умолчанию? Почему бы не использовать ActiveSupport::Cache::SynchronizedMemoryStore? На мой взгляд, на веб-сайте, если кеш не является поточно-ориентированным, он практически бесполезен, поскольку запросы не обрабатываются в ОДНОМ потоке.

Используете ли вы Rails.cache в вашем веб-приложении? И как ты это используешь?

Ответы [ 3 ]

4 голосов
/ 18 июня 2010

Хранилище кэша по умолчанию в Rails: ActiveSupport::Cache::FileStore, а не MemoryStore.

Хранилище памяти на практике имеет ограниченное использование, поскольку оно ограничено одним процессом, что делает его бесполезным для приложений Rails, которые развертываются с использованием Passenger или кластера Mongrel, где запросы обрабатываются в отдельных процессах, а не в отдельных потоках .

Для приложений малого и среднего размера вам, вероятно, хорошо подойдет хранилище файлов по умолчанию. Если вам нужно выйти за рамки этого, вы должны взглянуть на ActiveSupport::Cache::MemCacheStore.

2 голосов
/ 18 июня 2010

Большинство сценариев развертывания для Rails на самом деле являются однопоточными.Параллельность достигается путем запуска нескольких процессов, либо автоматически, либо заранее.Для многих людей безопасность потоков не будет иметь большого значения.

Многопоточные опции существуют (особенно с JRuby), поэтому ваш вопрос все еще актуален.Вот почему в Rails 3 старый ActiveSupport::Cache::MemoryStore был удален и заменен на ActiveSupport::Cache::SynchronizedMemoryStore, что по умолчанию делает его потокобезопасным.

Если вам нужна безопасность потоков в приложении Rails 2, поставьтеследующее где-то в вашей среде.

ActionController::Base.cache_store = :synchronized_memory_store
0 голосов
/ 18 февраля 2018

Кеш Rails по умолчанию (ActiveSupport :: Cache MemoryStore) является поточно-ориентированным с Rails версии 3.1: http://api.rubyonrails.org/v3.1.0/files/activesupport/CHANGELOG.html Как отмечает CHANGELOG: «Сделать поток безопасным, чтобы реализация кеша по умолчанию, используемая Rails, была поточнойсейф ".

...