gpt4 book ai didi

ruby-on-rails - ruby on rails 3 使用缓存数据重新加载

转载 作者:行者123 更新时间:2023-12-04 06:36:36 24 4
gpt4 key购买 nike

在我的应用程序中使用 activerecord reload 命令似乎在调用时使用了缓存数据。

我可以通过执行以下操作在调试器中进行复制。

u = User.find(1)
u.first_name
#outputs bob

# manually change first_name for record 1 to jim with PGadmin or with rails console

u.reload
u.valid?
#outputs true
u.first_name
#outputs bob

#if i do this again
u = User.find(1)
#old data again
u.first_name
#outputs bob

#if i load data this way
u = User.where('id = 1').first
#new data
u.first_name
#outputs jim

在运行 reload 后查看我的日志文件时,它会打印出来

[1m[35mCACHE (0.0ms)[0m SELECT "users".* FROM "users"WHERE ("users"."id"= 1) LIMIT 1

看来是在使用缓存

我的环境:Rails 3.0.3、Ruby 1.8.7、Ubuntu 10.04、PostgreSQL 8.4

最佳答案

您需要进行写入(例如,通过在某些模型上调用 save),以便查询缓存被炸毁。

如果您在执行 reload 时查看 development.log,ActiveRecord 会发出 SELECT 查询。但是,它不会炸毁查询缓存,而是用于回答 User.find(1) 查询。

我认为重新加载适用于从应用程序的其他部分更新数据库时。我也认为你可以像这样包装你的 find 以避免缓存:

ActiveRecord::Base.uncached do
User.find(1)
end

关于ruby-on-rails - ruby on rails 3 使用缓存数据重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5384517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com