我将用户杂项数据存储在user_data表中,当我使用我定义的关联检索该数据时,我实际上是使用像这样的Ruby实例变量缓存来缓存它。
def user_data(user_id)
@user_data || = User.find(user_id).data
end
但是实例变量@user_data
将仅在第一次为nil时分配值,并且一旦它为用户保存数据,则表示user_id等于1,并且当我在此方法中传递user_id 2时,它返回数据对于user_id 1,因为它不会为它分配新值所以我的问题是如何根据函数的参数缓存它的值。
答案 0 :(得分:7)
看看Caching with Rails guide。 Rails可以缓存从完整页面缓存到片段缓存的多个级别的数据,我强烈建议您阅读所有这些页面,以便您做出明智的选择。
对于低级缓存,您可以这样做:
@user_data = Rails.cache.fetch("user_#{user_id}", expires_in: 1.hour) do
User.find(user_id).data
end
默认情况下,Rails将缓存存储在磁盘上,但您可以设置内存缓存,内存存储等。
答案 1 :(得分:2)
您可以将哈希用于基于密钥的intance-variable-cache。我认为那就是你想要的。
while(true)