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  }