github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2013/highperf/longtail.go (about) 1 // +build OMIT 2 3 package pkg 4 5 // long_tail_memcache_bad 6 func myHandler(w http.ResponseWriter, r *http.Request) { 7 c := appengine.NewContext(r) 8 // ... 9 // regular request handling 10 // ... 11 12 go memcache.Set(c, &memcache.Item{ 13 Key: key, 14 Value: data, 15 }) 16 } 17 18 // long_tail_memcache_good 19 func myHandler(w http.ResponseWriter, r *http.Request) { 20 c := appengine.NewContext(r) 21 // ... 22 // regular request handling 23 // ... 24 25 // Save to memcache, but only wait up to 3ms. 26 done := make(chan bool, 1) // NB: buffered 27 go func() { 28 memcache.Set(c, &memcache.Item{ 29 Key: key, 30 Value: data, 31 }) 32 done <- true 33 }() 34 select { // HL 35 case <-done: // HL 36 case <-time.After(3 * time.Millisecond): // HL 37 } // HL 38 }