func getOrCreateAccount(c appengine.Context, user *user.User) (*KindiAccount, error) { var account KindiAccount _, err := memcache.JSON.Get(c, user.ID, &account) if err != nil && err != memcache.ErrCacheMiss { return nil, err } if err == memcache.ErrCacheMiss { key := datastore.NewKey(c, "KindiAccount", user.ID, 0, nil) return &account, datastore.RunInTransaction(c, func(c appengine.Context) error { err := datastore.Get(c, key, &account) if err != nil && err != datastore.ErrNoSuchEntity { return err } if err == datastore.ErrNoSuchEntity { account.Email = user.Email account.KindiCoins = 0 _, err = datastore.Put(c, key, &account) if err != nil { return err } } memcacheItem := new(memcache.Item) memcacheItem.Key = user.ID memcacheItem.Object = account return memcache.JSON.Set(c, memcacheItem) }, nil) } return &account, nil }
func getAccount(c appengine.Context, userId string) (*KindiAccount, error) { var account KindiAccount _, err := memcache.JSON.Get(c, userId, &account) if err != nil && err != memcache.ErrCacheMiss { return nil, err } if err == memcache.ErrCacheMiss { key := datastore.NewKey(c, "KindiAccount", userId, 0, nil) err := datastore.Get(c, key, &account) if err != nil { return nil, err } memcacheItem := new(memcache.Item) memcacheItem.Key = userId memcacheItem.Object = account err = memcache.JSON.Set(c, memcacheItem) if err != nil { return nil, err } } return &account, nil }
func (op *DataConn) PutCacheItem(item DataItem) error { citem := new(memcache.Item) citem.Key = fmt.Sprintf("%s:%d", op.Entity, item.ID()) citem.Object = item err := memcache.Gob.Set(op.Wreq.C, citem) return err }