func Counter(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) // 未設定の場合は第4引数の値で初期化する // memcache.IncrementExistingは未設定だとエラーになる if newValue, err := memcache.Increment(c, "inc", 1, 0); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } else { fmt.Fprintf(w, "newValue = %d\n", newValue) } if stats, err := memcache.Stats(c); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } else { // キャッシュヒットとなる要求の回数 fmt.Fprintf(w, "Hits = %d\n", stats.Hits) // キャッシュミスとなる要求の回数 fmt.Fprintf(w, "Misses = %d\n", stats.Misses) // 取得要求時の総データ転送量 fmt.Fprintf(w, "ByteHits = %d\n", stats.ByteHits) // キャッシュに保存されているキーと値のペア数 fmt.Fprintf(w, "Items = %d\n", stats.Items) // キャッシュ内のすべてのアイテムの合計サイズ fmt.Fprintf(w, "Bytes = %d\n", stats.Bytes) // キャッシュ内の一番古いアイテムにアクセスされた時からの秒数 fmt.Fprintf(w, "Oldest = %d\n", stats.Oldest) } }
func (ctl contextTemplateLoader) LoadTemplate(name string) (Template, error) { c := ctl.Context var c_temp ctlTemplate // check the memcache if _, err := memcache.Gob.Get(c, name, &c_temp); err == nil { return fromCtlTemplate(c_temp), nil } else if err != memcache.ErrCacheMiss { return Template{}, err // if encounter any error but cache miss return the failure } // read the value from the datastore if err := datastore.Get(c, datastore.NewKey(c, "Name", name, 0, nil), &c_temp); err != nil { return Template{}, err } const max_cache_size = 20 * Mebi const min_cache_time = 20 // in seconds // if the oldest item in the cache is too young, if stats, err := memcache.Stats(c); err != nil { log.Println(err) } else if stats == nil || stats.Bytes < max_cache_size || stats.Oldest > min_cache_time { // cache the value from the datastore if we're under the max size or the oldest item is over the min time err := memcache.Gob.Set(c, &memcache.Item{Key: name, Object: &c_temp, Expiration: 1 * time.Hour}) log.Println(err) } return fromCtlTemplate(c_temp), nil }
func memcacheHandler(w http.ResponseWriter, r *http.Request) { c := appengine.NewContext(r) w.Header().Set("Content-Type", "application/json") stats, err := memcache.Stats(c) if err != nil { writeJSON(w, map[string]string{"error": err.String()}) return } writeJSON(w, stats) }
// Count returns the total number of items in the store. func (s *Store) Count(c appengine.Context) int64 { stats, _ := aemc.Stats(c) return int64(stats.Items) }