【发布时间】:2017-04-17 14:16:09
【问题描述】:
假设我有一个 ActiveRecord 类“用户”。
我意识到当我第一次通过 User.new 使用它时,Rails 会调用数据库以从 users 表中获取 User 的实际属性。随后它会被缓存,并且不需要数据库调用。
这很好..在一个线程中很简单。
假设我有多个线程在一个进程中运行。调用 User.new 的第一个线程(或任何涉及 User,例如查找一个)将在数据库中查找属性。后续的会将它们缓存起来。
有没有办法检查 ActiveRecord 属性是否被缓存?
当我不打算使用数据库连接时,我不想在调用 User.new 时总是通过 ActiveRecord::Base.connection_pool.with_connection 检查数据库连接 - 是的,甚至不保存它.
u = nil
ActiveRecord::Base.connection_pool.with_connection do # I don't want to checkout a conn if User attributes are cached.
u = User.new
end
#manipulation of u. but u.save NEVER ever gets called.
我不会完全解释我的全部推理,但这样做会影响人们的回答,因为一句话:这很复杂。如果有兴趣,这里有一篇文章,虽然这与我的问题相似:https://bibwild.wordpress.com/2014/07/17/activerecord-concurrency-in-rails4-avoid-leaked-connections/ 如果可能的话,我基本上不想检查数据库连接,但仍然想调用 User.new 来操作它但不保存它。
【问题讨论】:
标签: ruby-on-rails ruby caching activerecord