分页的expire_action

时间:2015-06-29 21:10:17

标签: ruby-on-rails ruby caching pagination cache-expiration

  • ruby​​ 2.2.2p95
  • rails 4.2.1

我的缓存生成正在发挥作用。

索引页

http://localhost:3001/produtos
Write fragment views/localhost:3001/produtos (11.0ms)

分页页

http://localhost:3001/produtos/pagina/2
Write fragment views/localhost:3001/produtos/pagina/2 (15.3ms)

但是我很难过期。 我正在使用扫地机来使我的动作缓存失效,而我还没弄清楚如何使分页页面过期。

class ProductsController < ApplicationControlle
   caches_action [:show, :index]
end


class Admin::ProductsController < Admin::BaseController
    cache_sweeper :product_sweeper
end

class ProductSweeper < ActionController::Caching::Sweeper
    observe Product
    def after_save(product)
        expire_action products_url
        expire_action category_product_url(category_id: product.category.slug)
    end
end

如何使分页页面过期

http://localhost:3001/produtos/pagina/2
http://localhost:3001/produtos/pagina/3
http://localhost:3001/produtos/pagina/4
...

等等?

1 个答案:

答案 0 :(得分:1)

缓存过期很难

如果您真的想担心缓存过期,可以使用以下解决方案:Pagination and page cache sweepers

在Rails 4中处理w / cache过期的推荐方法是使用缓存键,而不用担心缓存过期: How key-based cache expiration works

您可以将Product.maximum(:updated_at)用作所有产品索引和分页页面的缓存键的一部分。当其中一个产品更新时,更改所有产品索引页面的密钥可能更好,而不是试图猜测哪些页面会受到更改的影响。

如果您允许用户更改每页的记录数,那么它也需要成为缓存键的一部分。