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

时间:2013-10-11 13:12:19

标签: varnish varnish-vcl esi

我正在开发一款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

有没有办法可以将产品缓存在清漆中,并为已售罄的产品设置ttl。一些研究表明ESI可能是一个好主意。但是,我找不到可以遵循的详细文档来实现这一点。另外,如何在清漆中访问sold_out_status的输出?

编辑:可以通过跟踪请求网址找到网页上售罄的商品,与此网址对应的网页包含以文字形式呈现的售罄产品的ID。

1 个答案:

答案 0 :(得分:1)

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);
}