我正在使用排隊系統(Sidekiq)並希望移動到ActiveJob以獲得性能優勢,而不必每次將ActiveRecord對象傳遞給工作人員時都要查詢數據庫。我想詢問並確認,因爲我不是100%確定的,但我的理解是,當ActiveJob使用GlobalID傳遞ActiveRecord對象時,所有對象都在內存中完成,並且對數據庫的單獨查詢未完成時,是正確的?ActiveJob GlobalID和內存中的ActiveRecord對象
0
A
回答
1
這是不正確的。
如果您使用ActiveJob,它會將任何ActiveRecord對象序列化爲global_id字符串以保存到您的隊列中。然後在作業開始時再從字符串中查找它。默認情況下,該字符串只包含應用程序名稱,類名稱和ID,它將使用數據庫加載模型。
"gid://app/User/1"
DelayedJob將系列化你給它的任何對象轉換爲字符串YAML和反序列化它沒有擊中超出裝載作業的DB。您也可以使用Sidekiq來完成此操作,而不是觸碰Redis以加載作業而不觸摸主數據庫。
user = User.find(1)
MyJob.perform_later(user.to_yaml)
# Load the user object from the yaml
YAML::load(user.to_yaml) == user # true
您將無需前往數據庫即可獲取對象。然而,YAML會變得很大,你用Redis得到的性能損失可能不值得。
還有幾個問題需要注意。對象可能已過時,無論是數據還是結構。如果更改代碼,則由於結構更改,序列化對象可能無法再次加載。如果在序列化對象之後更新數據庫,那麼當您加載它時,您將不知不覺地使用舊數據。
希望能夠幫助您瞭解ActiveJob和GlobalId提供的內容。
相關問題
- 1. Globalid和pg在gemfile中不存在
- 2. 存根ActiveRecord ::與ActiveRecord對象的關係
- 3. ActiveJob問題實現Delayed_job
- 4. 會話和內存中的對象
- 5. 對ActiveRecord對象的哈希getter和setter
- 6. 釋放對象內存中的對象
- 7. 內存中的對象和一般的內存管理
- 8. 保存ActiveRecord對象的數組?
- 9. ActiveRecord的:當保存多個對象
- 10. 內存中的對象python
- 11. Rails的ActiveRecord定義其他對象內的數據庫對象
- 12. 在NHibernate中緩存對象和內容
- 13. 將ActiveRecord :: Relation對象追加到單個ActiveRecord對象中
- 14. ActiveJob :: SerializationError與ActiveUUID
- 15. 內存對象
- 16. Android內存使用和內存中的對象未在1.6和2.1中發佈
- 17. ActiveRecord的關係和對象模型
- 18. asp.net mvc + activerecord保存對象圖
- 19. 使用Dalli緩存大型ActiveRecord對象
- 20. 在ActiveRecord對象中查找
- 21. 壓縮內存中的緩存對象
- 22. 對象集的Where()方法和內存
- 23. Android的創建對象和內存
- 24. 我可以發送delayed_job一個內存中唯一的ActiveRecord對象嗎?
- 25. 繼承ActiveRecord對象
- 26. activerecord內存共享緩存
- 27. Rails 3 ActiveRecord抽象對象
- 28. ActiveRecord的對象的相等
- 29. .NET中的內存中對象索引
- 30. Rails利用ActionController和ActiveJob中的函數