我有一个约会安排应用程序,其中绝大多数的约会数据是“桥下的水”。对于任何给定的日历页面,该页面上约5%的约会是新鲜的;其余的都是旧的,不可能永远改变。
问题是每个页面都有大量的约会,并且加载所有这些约会(即使是急切的加载)也很慢。我想做一些缓存以加快速度,但我不希望每次有人创建约会时都会使整个缓存无效,因为用户在每次创建约会后都会看到日历页面,因此似乎使整个缓存无效这一点会破坏缓存的整个目的。
我的理解是我想要的是LRU cache。我如何在Rails / PostgreSQL缓存中实现它?它应该在应用程序级别还是数据库级别完成? LRU缓存是否正确?
答案 0 :(得分:0)
一个可能的问题是您的ORM可能会产生大量的小查询。首先要看的是合并数据语句并适当地删除SQL以获取有趣的约会集。从那里你可以使用PostgreSQL索引快速完成任务。请注意,PostgreSQL允许您创建部分索引以及完整索引,这使您可以一次索引一个部分索引。
但是,如果这不起作用,则一个选项是使用LISTEN和NOTIFY使特定缓存条目无效并强制重建。但是你在这里遇到了一些重大的挑战,所以它不是我要开始的地方。请记住,PostgreSQL会对LRU进行相当多的缓存,因此您可以进行更多的工作,并优化数据库,您就不必担心其余的数据。