2013-03-31 39 views
0

我有一个约会调度应用程序,其中绝大多数约会数据是“桥下的水”。对于任何给定的日历页面,该页面上约会的5%是新鲜的;其余的都很旧,不太可能改变。在Rails/PostgreSQL应用程序中实现LRU缓存

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

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

+0

我会看看使用'LISTEN'和'NOTIFY'以及有效载荷来指示缓存的选择性失效。缓存可以是Memcached,Redis或更特定的ActiveRecord/Rails。 –

回答

0

一个可能的问题是您的ORM可能会产生很多小的查询。首先要看的是整合你的数据语句并适当地下降到SQL来获取有趣的约会。从那里你可以使用PostgreSQL索引使事情变得非常快。请注意,PostgreSQL允许您创建部分索引以及全部索引,这使您可以一次索引表中的部分索引。

但是,如果这不起作用,那么一个选项是使用LISTEN和NOTIFY来使特定缓存条目无效并强制其重建。然而,你在这里有一些重大的挑战,所以它不是我要开始的地方。请记住,PostgreSQL本身就有一些LRU缓存功能,所以你可以更好地处理它,并且优化你的数据库,你就不用担心其余的问题了。