在配置 Varnish 4 时,我对内部短路很感兴趣vcl_recv
,但我不想跳过Builtin.vcl (née default.vcl) VCL 逻辑。例如,给定以下 VCL 伪代码:
sub vcl_recv {
if (somecondition1) {
set some_thing;
return (hash); # Return from cache if present, or fetch from the backend
}
if (somecondition2) {
set some_other_thing;
return (hash); # Return from cache if present, or fetch from the backend
}
// ...
return (pass); # Skip cache, fetch from the backend
}
问题 1
如果我调用return
所有可能的代码路径,那么内置逻辑将被跳过, 正确的?
问题2
有没有办法格式化与上述类似的代码,但不跳过builtin.vcl逻辑?我能看到的唯一方法是组合我的条件,对!
它们进行布尔运算,然后将其移动到return (pass);
巨大的内部if
。
答案1
1)是的
2) 返回的全部意义在于您跳过部分代码,停止运行不需要的代码(散列、传递、丢失)。如果您需要运行它,请
a) 复制您需要在返回之前执行的代码,或者
b) 使用大量包装器。
就我个人而言,我倾向于复制和替换所有内置 vcl,除了最基本的网站之外,我可以通过这种方式获得非常高的命中率 (98%+)。