0

我在我的 Rails 应用程序中有查询,运行时间不长(~180 毫秒),但确实返回了很多结果。结果在 API 中使用,结果到 JSON 的转换很昂贵(约 3 秒)。为了加快速度,我像这样缓存它:

key = 'new_prices'
query = Prices.new_this_month.where('...')
json = cache(key, expires_in: 60.minutes) do
  render_to_string json: query, each_serializer: PriceSerializer
end
render json: json

在后台,可以将新价格添加到数据库中。如何生成缓存键,如果query更改结果,缓存无效?

我正在使用 Rails 3.2,通过dalligem 使用 memcached。

4

1 回答 1

0

因为你有一个new_this_month范围,我假设Prices有一个created_at时间戳。在这种情况下,您可以简单地使用最新created_at的缓存键:

cache_key = "new_prices-#{Prices.order('created_at DESC').take.created_at}"

如果你有一个好的数据库索引,这应该是一个非常快速的查询。

于 2014-12-21T14:28:54.683 回答