簡體   English   中英

為什么Rails.cache不是線程安全的?

[英]Why Rails.cache is not thread safe?

我知道Rails.cacheActiveSupport::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM