如何在Varnish中缓存动态内容?

4

我正在开发一个 RoR 应用程序。我希望为售罄商品设置一个 TTL。sold_out_status 函数返回已售罄产品的 productIds,并定义如下:

def sold_out_status
 query_str = params[:pids]
 pids = query_str.split(",")
 sold_outs = cache(request.fullpath.to_s, :expires_in => 3600.seconds.to_i) do 
  pids.select {|x| (Product.find(x).on_hand <= 0)}.join(",")
 end

render :text => sold_outs
end

有没有一种方法可以在varnish中缓存产品并为售罄的产品设置ttl。一些研究表明,ESI可能是一个好主意。但是,我找不到详细的文档,可以按照其实施。另外,我如何访问varnish中sold_out_status的输出?
编辑:可以通过以下请求URL找到页面上的售罄产品,相应于此URL的页面包含以文本形式呈现的售罄产品的ID。
1个回答

2
vcl_fetch 中添加以下内容:
sub vcl_fetch{
  if (req.url ~ "^/taxons/sold_out_status.") {
    std.syslog(180, "setting TTL for sold out products");
    set beresp.do_esi = true;
    set beresp.ttl = 1s;
    return(deliver);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接