Rails:在会话期间缓存多个结果集

时间:2014-01-22 18:45:55

标签: ruby-on-rails ruby caching activerecord memcached

我有一个搜索静态文档集的Rails应用程序,我需要找出缓存结果集的最佳方法。我不能只使用本机ActiveRecord缓存。

我的情况:

我正在使用will_paginate gem,目前,每次用户更改页面时都会运行查询。有些查询太复杂,无法响应,所以我需要缓存结果,至少在单个会话期间。此外,用户可以打开多个选项卡,同时运行单独的查询。文档集是静态的;集合的大小大约是成千上万的文档。

为什么直接的ActiveRecord缓存不起作用:

用户可以搜索文档的内容,或者根据元数据限制(如日期范围)或两者进行搜索。每个文档的元数据都存储在ActiveRecord中,因此这些条件将应用ActiveRecord查询。

但如果他们为文档内容添加搜索词,我会使用单独的FastCGI应用程序运行该搜索,因为我正在做一些专门的搜索逻辑。所以,我通过了术语& WinCowI文档列表到FastCGI应用程序,它响应最终结果列表。然后我做另一个ActiveRecord查询:where(“id IN(?)',returnedIds)

顺便说一下,这些FastCGI搜索有时很复杂而无法响应。

我的想法:

有一种显而易见的新手方法:我可以使用元数据限制加上搜索词作为键;它们已经存储在哈希中。它们将与returnedIds数组配对。 this guide at RubyOnRails.org提到了可用的缓存存储。但我不清楚哪个商店最好,而且我也假设有一个更好的宝石。

我发现了gem memcached,但我不清楚它是否可用于缓存我的FastCGI请求的结果。

0 个答案:

没有答案