为什么 Rails.cache 不是线程安全的?

Fre*_*ind 2 caching ruby-on-rails ruby-on-rails-2

我知道Rails.cache是的ActiveSupport::Cache::MemoryStore,而且它不是线程安全的。

我不明白,为什么 Rails 使用线程不安全的缓存作为默认值?为什么不使用ActiveSupport::Cache::SynchronizedMemoryStore?在我看来,在一个网站中,如果缓存不是线程安全的,它几乎毫无用处,因为请求不是在一个线程中处理的。

你在你的网络应用程序中使用吗Rails.cache?你如何使用它?

Pär*_*der 5

Rails 中的默认缓存存储是ActiveSupport::Cache::FileStore, 不是MemoryStore

内存存储在实践中用途有限,因为它仅限于单个进程,这使得它对于使用 Passenger 或 Mongrel 集群部署的 Rails 应用程序毫无用处,其中请求在单独的进程中处理,而不是在单独的线程中处理。

对于中小型应用程序,您可能可以使用默认文件存储。如果您需要扩大规模,您应该看看ActiveSupport::Cache::MemCacheStore.