我一直在研究Rails 4应用程序,我需要将应用程序的主导航存储在数据库表中。原因是主导航是一个类别列表。这些类别与其他表格相关联。我希望我的网站导航与类别列表保持同步。
我这样关心的是应用程序会在每个请求上进行数据库查询。我想知道是否有一种缓存方法,但在更改数据库中的类别时仍然无效。
什么是从表中加载导航但却没有被数据库查询命中的最佳方法?
答案 0 :(得分:1)
为避免每次请求都按下DB,请使用memcache或redis缓存结果。
但是,缓存是一个很大的主题,并且存在许多缓存策略。正如您的问题提示,缓存过期是本主题的难点,而不是缓存。
说到过期技术,在数据库方面,俄罗斯玩偶缓存现在被认为是最佳实践。如果您的数据没有改变(这意味着您不需要担心缓存过期),您可以使用页面缓存 - 如果是这样,请自己算一算。如果它只是偶尔改变,动作缓存可能是有序的。否则,我强烈建议对视图页面的部分内容进行片段缓存,并为从数据库中提取时耗时的单个方法进行模型缓存。
总体而言,在使用缓存进行性能优化时,从高处开始然后变低。您将获得的收益将更大,更省力。
从高到低,您可以使用某些类型的缓存:
缓存键上的Railscast(俄语Doll缓存依赖于它们起作用):http://railscasts.com/episodes/387-cache-digests
高级缓存指南:http://hawkins.io/2012/07/advanced_caching_revised/
不是免费的,但我发现这个系列真正让我理解了各种形式的缓存: http://www.pluralsight.com/courses/rails-4-1-performance-fundamentals