Closed dekokun closed 8 years ago
キャッシュしているリクエストから呼ばれたESIは無条件にキャッシュされるか
そんなことなかったので特にこれを行う必要はなかった
やるとしたらこんな感じ。 トップページは考慮していない
isucon@isucon-varnish:~/webapp/config$ g diff | cat
diff --git a/webapp/config/default.vcl b/webapp/config/default.vcl
index cc02519..fbb75be 100644
--- a/webapp/config/default.vcl
+++ b/webapp/config/default.vcl
@@ -30,9 +30,8 @@ sub vcl_recv {
set req.backend_hint = backend.backend();
if (req.method == "INVALIDATE") {
- # ban("obj.http.Hoge ~ ^.*" + req.http.X-Invalidated-Hoge + ".*$");
- ban("obj.response ~ ^.*" + req.http.X-Invalidated-Hoge + ".*$");
- return(synth(200, req.http.X-Invalidated-Hoge + " Purged. Success !!"));
+ ban("obj.http.Keyword ~ ^.*" + req.http.X-Invalidated-Keyword + ".*$");
+ return(synth(200, req.http.X-Invalidated-Keyword + " Purged. Success !!"));
}
diff --git a/webapp/go/isutar.go b/webapp/go/isutar.go
index 4d003b4..7075789 100644
--- a/webapp/go/isutar.go
+++ b/webapp/go/isutar.go
@@ -68,6 +68,13 @@ func starsPostHandler(w http.ResponseWriter, r *http.Request) {
user := r.FormValue("user")
_, err = db.Exec(`INSERT INTO star (keyword, user_name, created_at) VALUES (?, ?, NOW())`, keyword, user)
panicIf(err)
+ // cache invalidate
+ req, err := http.NewRequest("INVALIDATE", "http://localhost:6081", nil)
+ req.Header.Add("X-Invalidated-Keyword", pathURIEscape(keyword))
+ client := &http.Client{}
+ resp, err = client.Do(req)
+ panicIf(err)
+ defer resp.Body.Close()
re.JSON(w, http.StatusOK, map[string]string{"result": "ok"})
}
キャッシュしているリクエストから呼ばれたESIは無条件にキャッシュされるか〜。なるほど。