我正在使用redis作为缓存存储,我想缓存公共数据
@links = Rails.cache.fetch "FriendsLinks" do
Link.where(category_id: 0)
end
但是从Rails.cache.fetch
返回的数据是String
,而不是List
个对象的数组。
我必须从redis中删除缓存,然后下一个请求才有效。但很多时候,它会再次破裂。
编辑: 它只发生在开发环境
答案 0 :(得分:1)
我找到了问题。
问题是当从redis / memcache检索数据时,相关模型尚未加载。因此,红宝石不能执行解组。
简单的解决方案是设置
config.cache_classes = true
缺点是您在进行代码更改时必须重新启动应用程序。
另一个是在Rails.cache之前放置相关的类,例如
Link
@links = Rails.cache.fetch "FriendsLinks" do
Link.where(category_id: 0)
end
或者创建一个初始化程序并将其放在config / initializers下
if Rails.env == "development"
Dir.glob("#{Rails.root}/app/models/**/*.rb") do |model_name|
require_dependency model_name
end
end