Ruby on rails 4 从Rails中的DB表加载站点导航的性能方法

Ruby on rails 4 从Rails中的DB表加载站点导航的性能方法,ruby-on-rails-4,caching,sqlite,Ruby On Rails 4,Caching,Sqlite,我一直在开发Rails 4应用程序,我需要将应用程序的主导航存储在DB表中。原因是主导航是一个类别列表。这些类别与其他表关联。我希望我的网站导航是最新的类别列表 我担心的是,应用程序会对每个请求进行DB查询。我想知道是否有一种缓存的方法,但当我更改数据库中的类别时,它仍然无效 从表中加载导航而又不被DB查询命中的最佳方式是什么?要避免每次请求都命中DB,请使用memcache或redis缓存结果 然而,缓存是一个巨大的主题,存在许多缓存策略。正如您的问题所提示的,缓存过期是本主题的难点,而不是缓

我一直在开发Rails 4应用程序,我需要将应用程序的主导航存储在DB表中。原因是主导航是一个类别列表。这些类别与其他表关联。我希望我的网站导航是最新的类别列表

我担心的是,应用程序会对每个请求进行DB查询。我想知道是否有一种缓存的方法,但当我更改数据库中的类别时,它仍然无效


从表中加载导航而又不被DB查询命中的最佳方式是什么?

要避免每次请求都命中DB,请使用memcache或redis缓存结果

然而,缓存是一个巨大的主题,存在许多缓存策略。正如您的问题所提示的,缓存过期是本主题的难点,而不是缓存

说到过期技术,在数据库方面,缓存现在被认为是最佳实践。如果您的数据没有改变(这意味着您不需要担心缓存过期),那么您可能能够通过页面缓存找到出路——如果是这样的话,算您走运吧。如果只是偶尔更改,则操作缓存可能是合适的。否则,我强烈建议将片段缓存用于视图页面的某些部分,并将模型缓存用于单个方法,这些方法在从数据库获取时非常耗时

总的来说,在使用缓存进行性能优化时,先高后低。付出更少的努力,你将获得更大的收获

从高到低,您可以使用的缓存类型有:

  • (不缓存服务器,但涉及用户的浏览器通过读取HTTP头在本地缓存内容)
  • (memcache)
  • (memcache)
  • (memcache)或(一种片段缓存)
  • (memcache)
让您开始的其他资源: Railscast on cache Key(俄罗斯玩偶缓存依靠它们工作):

高级缓存指南:

不是免费的,但我发现这个系列真正让我正确理解了各种形式的缓存: