【问题标题】:Implementing LRU cache in Rails/PostgreSQL app在 Rails/PostgreSQL 应用程序中实现 LRU 缓存
【发布时间】:2013-03-21 16:04:50
【问题描述】:

我有一个约会安排应用程序,其中绝大多数约会数据都是“桥下的水”。对于任何给定的日历页面,该页面上可能有 5% 的约会是新的;其余的都是旧的,不太可能改变。

问题是每个页面都可能有大量的约会,并且加载所有这些约会(即使是预先加载)很慢。我想做一些缓存以加快速度,但我不想每次有人创建约会时都使整个缓存无效,因为用户在每次创建约会后都会看到日历页面,所以似乎使整个缓存无效这一点会破坏缓存的全部目的。

我的理解是我想要的是LRU cache。我如何在 Rails/PostgreSQL 缓存中实现这​​一点?应该在应用程序级别还是数据库级别完成? LRU 缓存是否正确?

【问题讨论】:

  • 我会考虑使用带有有效负载的LISTENNOTIFY 来向缓存发出选择性失效的信号。缓存可以是 Memcached、Redis 或其他更特定于 ActiveRecord/Rails 的东西。

标签: ruby-on-rails postgresql caching


【解决方案1】:

一个可能的问题是您的 ORM 可能会生成大量小查询。要做的第一件事是整合您的数据语句并酌情使用 SQL 来获取一组有趣的约会。从那里你可以使用 PostgreSQL 索引使事情变得非常快。请注意,PostgreSQL 允许您创建部分索引以及完整索引,这允许您一次索引一个表的片段。

但是,如果这不起作用,那么一种选择是使用 LISTEN 和 NOTIFY 使特定缓存条目无效并强制重建它们。但是,您在这里面临一些重大挑战,因此这不是我要开始的地方。请记住,PostgreSQL 会自己进行大量的 LRU 缓存,因此您可以在这方面进行的工作越多,优化您的数据库,您就越不必担心其余的事情。

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 2015-02-13
    • 2010-11-03
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多