在配置 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) 是的
2)返回的全部意义在于您跳过部分代码,停止运行不需要的代码(散列、传递、丢失)。如果你需要运行它,要么
a) 在返回之前复制你需要执行的代码,要么
b) 使用大量的包装器 if。
就个人而言,我倾向于复制和替换所有内置 vcl,但最基本的站点除外,这样我可以获得非常高的命中率 (98%+)。