dekokun / isucon6-qualify

MIT License
0 stars 0 forks source link

starがついたらkeywordのキャッシュを破棄 #7

Closed dekokun closed 8 years ago

dekokun commented 8 years ago

キャッシュしているリクエストから呼ばれたESIは無条件にキャッシュされるか〜。なるほど。

dekokun commented 8 years ago

キャッシュしているリクエストから呼ばれたESIは無条件にキャッシュされるか

そんなことなかったので特にこれを行う必要はなかった

dekokun commented 8 years ago

やるとしたらこんな感じ。 トップページは考慮していない

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