[英]Why Rails.cache is not thread safe?
我知道Rails.cache
是ActiveSupport::Cache::MemoryStore
,它不是線程安全的。
我不明白,為什么Rails使用線程不安全的緩存作為默認緩存? 為什么不使用ActiveSupport::Cache::SynchronizedMemoryStore
? 我認為,在網站上,如果高速緩存不是線程安全的,則幾乎沒有用,因為請求不是在一個線程中處理的。
您是否在Rails.cache
應用程序中使用Rails.cache
? 以及如何使用它?
Rails中的默認緩存存儲為ActiveSupport::Cache::FileStore
,而不是MemoryStore
。
內存存儲在實踐中用途有限,因為它僅限於單個進程,這使它對於使用乘客或Mongrel集群部署的Rails應用程序毫無用處,在該集群中,請求是在單獨的進程中處理的,而不是在單獨的線程中處理的。
對於中小型應用程序,您最好使用默認文件存儲。 如果您需要擴展,請查看ActiveSupport::Cache::MemCacheStore
。
大多數Rails部署方案實際上都是單線程的。 並發是通過自動或預先生成多個進程來實現的。 對於許多人來說,線程安全並不重要。
確實存在多線程選項(尤其是JRuby),因此您的問題仍然有效。 這就是為什么在Rails 3中,舊的ActiveSupport::Cache::MemoryStore
已被刪除並替換為ActiveSupport::Cache::SynchronizedMemoryStore
,默認情況下使其成為線程安全的。
如果您需要Rails 2應用程序中的線程安全性,請在環境中放置以下內容。
ActionController::Base.cache_store = :synchronized_memory_store
從Rails 3.1版開始,默認的Rails緩存(ActiveSupport :: Cache MemoryStore)是線程安全的: http ://api.rubyonrails.org/v3.1.0/files/activesupport/CHANGELOG.html如CHANGELOG所述:“創建線程安全,因此Rails使用的默認緩存實現是線程安全的。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.