ruby on rails 3使用缓存数据重新加载
在我的应用程序中使用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
在运行重新加载后查看我的日志文件时,它会打印出来
[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)
查询缓存,而是用于回答User.find(1)
查询。
我认为重新加载是指从应用程序的其他部分更新数据库时。 我也认为你可以像这样包装你的发现以避免缓存:
ActiveRecord::Base.uncached do User.find(1) end
确保您的管理工具确实更改了数据库中的数据。 例如,通过一个工具写入数据,并通过另一个工具读取该数据。