我有一个位于光油后面的Plone网站。除了一件事外,所有的工作都可以。清漆:POST数据后清除缓存
这是一个动态网站,因此会不时有新的内容。场景如下:
我有一个显示项目列表的页面。此页面已被缓存。因此,我通过某种形式添加了另一个项目,并返回到同一页面,但未显示新项目。这是因为显示的页面来自缓存并且仍在TTL内。
如何确保在提交新项目时,该页面将从缓存中清除,并且将显示来自后端服务器的具有新项目的新页面?
我简单的VCL被如图所示:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
if (req.request != "GET" && req.request != "HEAD") {
# We only deal with GET and HEAD by default
return (pass);
}
# remove unnecessary cookies
if (req.http.cookie ~ "wc.cookiecredentials|Path|Domain") {
# found wc.cookiecredentials in request, passing to backend server
return (lookup);
} else {
unset req.http.cookie;
}
}
sub vcl_fetch {
#unset beresp.http.Set-Cookie;
set beresp.ttl = 12h;
return(deliver);
}
# Routine used to determine the cache key if storing/retrieving a cached page.
sub vcl_hash {
# Do NOT use this unless you want to store per-user caches.
if (req.http.Cookie) {
set req.hash += req.http.Cookie;
}
}
sub vcl_deliver {
# send some handy statistics back, useful for checking cache
if (obj.hits > 0) {
set resp.http.X-Cache-Action = "HIT";
set resp.http.X-Cache-Hits = obj.hits;
} else {
set resp.http.X-Cache-Action = "MISS";
}
}
还是把它说白了,我怎么能清除或清除整个缓存域每当我收到一个POST请求?
感谢您的回答@Ketola。每当我收到POST请求时,是否有办法清除整个缓存? – Frankline
确实有。我已经更新了我的答案,以涵盖此替代方案。虽然这不是一个非常有效的解决方案,并且在这种情况下,缓存命中率永远不会很高。 – Ketola
这应该是我现在的目的。 – Frankline