我刚开始为我的应用程序缓存,并且有点卡住了。我有一个依赖于范围的查询。合并范围将收集页面上创建的最后(x)个帖子。
Rails.cache.fetch('homepage/posts') do
posts = Post.by_latest
render json: posts
end
这就是我很难理解的地方。由于我要确保该网站显示最新的帖子,因此我不想手动设置到期时间或日期。相反,我想在创建或删除新帖子时使缓存过期。这是另一个难题。我本想在Post模型中进行回调,但是当我想使其他键的缓存过期但所有人都想完成同一件事时,事情变得有些混乱。
def flush_cache
Rails.cache.delete('homepage/posts')
Rails.cache.delete('posts')
...
end
我想更多地采用动态方法来刷新缓存,就像对待单个对象一样...缓存对象包含在对象的updated_at
属性中,并在修改后过期。我发现尽管很难与一个集合。从查询中生成缓存键将导致查询本身,从而破坏了缓存的总体目的:
Rails.cache.fetch(Post.by_latest.cache_key) do
posts = Post.by_latest
render json: posts
end
任何帮助将不胜感激。
答案 0 :(得分:1)
我认为您使用的方式不正确,Rails会很好地自动处理集合的缓存。
这是用于缓存集合的标准设置
posts = Rails.cache.fetch(Post.by_latest) do
Post.by_latest
end
render json: posts