本文整理汇总了Golang中appengine/memcache.Set函数的典型用法代码示例。如果您正苦于以下问题:Golang Set函数的具体用法?Golang Set怎么用?Golang Set使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Set函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: fetch
func fetch(c appengine.Context, key string) error {
s, ok := Sources[key]
if !ok {
return fmt.Errorf("%q not found", key)
}
c.Debugf("fetching %s data", key)
transport := urlfetch.Transport{Context: c, Deadline: 60 * time.Second}
req, err := http.NewRequest("GET", s.URL, strings.NewReader(""))
if err != nil {
return err
}
resp, err := transport.RoundTrip(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("fetch: bad status %d for %s", resp.StatusCode, s.URL)
}
contents, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
item := &memcache.Item{
Key: key,
Value: contents,
Expiration: s.Expiration,
}
if err := memcache.Set(c, item); err != nil {
return err
}
// We keep the last updated time in memcache. It's not
// updated atomically with the page, so it's only used to
// limit the rate of fetches from the data servers. Don't use
// it for display; use the data creation times in the data
// instead. It doesn't matter to the user that we fetched a
// weather forecast 3 minutes ago if the forecast is 48
// minutes old.
item = &memcache.Item{
Key: key + "_fresh",
Value: []byte(strconv.FormatInt(time.Now().Unix(), 10)),
}
if err := memcache.Set(c, item); err != nil {
return err
}
c.Infof("cached %d bytes of %s data", len(contents), key)
return nil
}
示例2: ShowOfDetalle
func ShowOfDetalle(w http.ResponseWriter, r *http.Request) {
now := time.Now().Add(time.Duration(model.GMTADJ) * time.Second)
var timetolive = 3600 //seconds
c := appengine.NewContext(r)
var b []byte
var d detalle
var cachename = "d_" + r.FormValue("id")
c.Infof("cachename %s", cachename)
if item, err := memcache.Get(c, cachename); err == memcache.ErrCacheMiss {
oferta, _ := model.GetOferta(c, r.FormValue("id"))
if now.After(oferta.FechaHoraPub) {
d.IdEmp = oferta.IdEmp
d.IdOft = oferta.IdOft
d.IdCat = oferta.IdCat
d.Oferta = oferta.Oferta
d.Empresa = oferta.Empresa
d.Descripcion = oferta.Descripcion
if oferta.Promocion != "" {
d.EmpLogo = oferta.Promocion
} else {
d.EmpLogo = "http://www.elbuenfin.org/imgs/imageDefault.png"
}
d.Enlinea = oferta.Enlinea
d.Url = oferta.Url
d.BlobKey = oferta.BlobKey
d.SrvUrl = oferta.Codigo
b, _ = json.Marshal(d)
item := &memcache.Item{
Key: "d_" + r.FormValue("id"),
Value: b,
Expiration: time.Duration(timetolive) * time.Second,
}
if err := memcache.Set(c, item); err == memcache.ErrNotStored {
c.Errorf("memcache.Add %v : %v", cachename, err)
if err := memcache.Set(c, item); err == memcache.ErrNotStored {
c.Errorf("Memcache.Set %v : %v", cachename, err)
} else {
c.Infof("memcached %v", cachename)
}
} else {
c.Infof("memcached %v", cachename)
}
}
} else {
c.Infof("memcache retrieve d_idoft : %v", r.FormValue("id"))
b = item.Value
}
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Write(b)
}
示例3: PutMulti
// PutMulti given a []*datastore.Key and a struct pointer adds multiple entities
// to the store.
func (s *Store) PutMulti(c appengine.Context, key []*datastore.Key, src interface{}) ([]*datastore.Key, error) {
v := reflect.ValueOf(src)
if len(key) != v.Len() {
return nil, errors.New(
"ds/memory: key and src slices have different length")
}
// TODO(kylefinley) we should use PutMulti here.
multiErr, any := make(dserrors.MultiError, len(key)), false
for i := range key {
// TODO(kylefinley) memcache has a 1mb size limit.
// We should make sure the entity doesn't exceed that amount.
var d bytes.Buffer
elem := v.Index(i)
enc := gob.NewEncoder(&d)
err := enc.Encode(elem.Interface())
if err != nil {
multiErr[i] = err
any = true
continue
}
id := key[i].Encode()
item := &aemc.Item{
Key: id,
Value: d.Bytes(),
}
if err := aemc.Set(c, item); err != nil {
multiErr[i] = err
any = true
}
}
if any {
return key, multiErr
}
return key, nil
}
示例4: createSession
func createSession(res http.ResponseWriter, req *http.Request, user User) {
ctx := appengine.NewContext(req)
// SET COOKIE
id, _ := uuid.NewV4()
cookie := &http.Cookie{
Name: "session",
Value: id.String(),
Path: "/",
// UNCOMMENT WHEN DEPLOYED:
// Secure: true,
// HttpOnly: true,
}
http.SetCookie(res, cookie)
// SET MEMCACHE session data (sd)
json, err := json.Marshal(user)
if err != nil {
log.Errorf(ctx, "error marshalling during user creation: %v", err)
http.Error(res, err.Error(), 500)
return
}
sd := memcache.Item{
Key: id.String(),
Value: json,
// Expiration: time.Duration(20*time.Minute),
Expiration: time.Duration(20 * time.Second),
}
memcache.Set(ctx, &sd)
}
示例5: TestContext
func TestContext(t *testing.T) {
c, err := NewContext(nil)
if err != nil {
t.Fatalf("NewContext: %v", err)
}
defer c.Close()
_, err = memcache.Get(c, "foo")
if err != memcache.ErrCacheMiss {
t.Fatalf("Get err = %v; want ErrCacheMiss", err)
}
it := &memcache.Item{
Key: "foo",
Value: []byte("value"),
}
err = memcache.Set(c, it)
if err != nil {
t.Fatalf("Set err = %v", err)
}
it, err = memcache.Get(c, "foo")
if err != nil {
t.Fatalf("Get err = %v; want no error", err)
}
if string(it.Value) != "value" {
t.Errorf("got Item.Value = %q; want %q", string(it.Value), "value")
}
e := &Entity{Foo: "foo", Bar: "bar"}
k := datastore.NewKey(c, "Entity", "", 1, nil)
_, err = datastore.Put(c, k, e)
if err != nil {
t.Fatalf("datastore.Put: %v", err)
}
}
示例6: handle
func handle(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
item, err := memcache.Get(c, r.URL.Path)
if err != nil && err != memcache.ErrCacheMiss {
serveError(c, w, err)
return
}
n := 0
if err == nil {
n, err = strconv.Atoi(string(item.Value))
if err != nil {
serveError(c, w, err)
return
}
}
n++
item = &memcache.Item{
Key: r.URL.Path,
Value: []byte(strconv.Itoa(n)),
}
err = memcache.Set(c, item)
if err != nil {
serveError(c, w, err)
return
}
w.Header().Set("Content-Type", "text/plain")
fmt.Fprintf(w, "%q has been visited %d times", r.URL.Path, n)
}
示例7: PutToken
func (m cache) PutToken(tok *oauth.Token) error {
return memcache.Set(m.Context, &memcache.Item{
Key: m.Key,
Value: []byte(tok.AccessToken),
Expiration: tok.Expiry.Sub(time.Now()),
})
}
示例8: createThumb
func (fi *FileInfo) createThumb(buffer *bytes.Buffer, c appengine.Context) {
if imageTypes.MatchString(fi.Type) {
src, _, err := image.Decode(bytes.NewReader(buffer.Bytes()))
check(err)
filter := gift.New(gift.ResizeToFit(
THUMB_MAX_WIDTH,
THUMB_MAX_HEIGHT,
gift.LanczosResampling,
))
dst := image.NewNRGBA(filter.Bounds(src.Bounds()))
filter.Draw(dst, src)
buffer.Reset()
bWriter := bufio.NewWriter(buffer)
switch fi.Type {
case "image/jpeg", "image/pjpeg":
err = jpeg.Encode(bWriter, dst, nil)
case "image/gif":
err = gif.Encode(bWriter, dst, nil)
default:
err = png.Encode(bWriter, dst)
}
check(err)
bWriter.Flush()
thumbnailKey := fi.Key + thumbSuffix + filepath.Ext(fi.Name)
item := &memcache.Item{
Key: thumbnailKey,
Value: buffer.Bytes(),
}
err = memcache.Set(c, item)
check(err)
fi.ThumbnailKey = thumbnailKey
}
}
示例9: get
func get(w http.ResponseWriter, r *http.Request) {
keyName := r.FormValue("key")
c := appengine.NewContext(r)
result := map[string]string{
keyName: "",
"error": "",
}
if item, err := memcache.Get(c, keyName); err == nil {
result[keyName] = fmt.Sprintf("%q", item.Value)
fmt.Fprintf(w, "%s", mapToJson(result))
return
}
key := datastore.NewKey("Entity", keyName, 0, nil)
entity := new(Entity)
if err := datastore.Get(c, key, entity); err == nil {
result[keyName] = entity.Value
// Set the value to speed up future reads - errors here aren't
// that bad, so don't worry about them
item := &memcache.Item{
Key: keyName,
Value: []byte(entity.Value),
}
memcache.Set(c, item)
} else {
result["error"] = fmt.Sprintf("%s", err)
}
fmt.Fprintf(w, "%s", mapToJson(result))
}
示例10: idhandler
func idhandler(w http.ResponseWriter, r *http.Request) {
c = appengine.NewContext(r)
clientID := strconv.Itoa(rand.Int())
// add nick to db
keysCache := &memcache.Item{
Key: clientID,
Value: []byte(r.FormValue("nick")),
}
memcache.Set(c, keysCache)
// add user to list
userList := getUserList()
if !stringInSlice(clientID, userList) {
keys := append(userList, clientID)
setUserList(keys)
}
// create channel
tok, _ := channel.Create(c, clientID)
responseList := []map[string]string{{"tok": tok, "id": clientID}}
for _, id := range userList {
nick := getNick(id)
responseList = append(responseList, map[string]string{"nick": nick, "id": id})
}
response, _ := json.Marshal(responseList)
fmt.Fprint(w, string(response))
}
示例11: RetrieveActDetails
func RetrieveActDetails(c appengine.Context, actId int) (res *ActDetail, err os.Error) {
var d DSActDetail
if itm, err := memcache.Get(c, "actId__"+strconv.Itoa(actId)); err != nil && err != memcache.ErrCacheMiss {
return nil, err
} else if err == nil {
// Cache hit
buf := bytes.NewBuffer(itm.Value)
dec := gob.NewDecoder(buf)
dec.Decode(&d)
} else {
// Cache miss
key := datastore.NewKey(c, "DSActDetail", "", int64(actId), nil)
if err := datastore.Get(c, key, &d); err == datastore.ErrNoSuchEntity {
return &ActDetail{ActId: actId}, nil
} else if err != nil {
return nil, err
}
buf := bytes.NewBufferString("")
enc := gob.NewEncoder(buf)
enc.Encode(d)
itm := &memcache.Item{
Key: "actId__" + strconv.Itoa(actId),
Value: buf.Bytes(),
}
err = memcache.Set(c, itm)
c.Debugf("Request cache to memcache")
}
return d.fromDS(), nil
}
示例12: Redirect
func Redirect(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
var dest Shortcut
key := r.URL.Path
if item, err := memcache.Get(c, key); err == nil {
http.Redirect(w, r, string(item.Value), http.StatusSeeOther)
return
} else if err != memcache.ErrCacheMiss {
c.Errorf("error getting item: %v", err)
}
dkey := datastore.NewKey(c, ShortcutType, key, 0, nil)
if err := datastore.Get(c, dkey, &dest); err == datastore.ErrNoSuchEntity {
c.Debugf("not found %q: %s", key, err)
http.Error(w, "nothing to redirect", http.StatusNotFound)
return
} else if err != nil {
c.Errorf("error: %s", err)
http.Error(w, "ups...", http.StatusInternalServerError)
return
}
item := memcache.Item{
Key: dest.ShortUrl,
Value: []byte(dest.FullUrl),
}
if err := memcache.Set(c, &item); err != nil {
c.Errorf("error setting item: %v", err)
}
http.Redirect(w, r, dest.FullUrl, http.StatusSeeOther)
}
示例13: CacheAccount
// CacheAccount puts the specified Account into the cache (memcache).
func CacheAccount(c appengine.Context, acc *ds.Account) {
mk := prefixAccForUID + acc.UserID
if err := memcache.Set(c, &memcache.Item{Key: mk, Value: acc.Encode(), Expiration: cachedAccExpiration}); err != nil {
c.Warningf("Failed to set %s in memcache: %v", mk, err)
}
}
示例14: CacheDevice
// CacheDevice puts the specified Device into the cache (memcache).
func CacheDevice(c appengine.Context, dev *ds.Device) {
mk := prefixDevForRandID + dev.RandID
if err := memcache.Set(c, &memcache.Item{Key: mk, Value: dev.Encode()}); err != nil {
c.Warningf("Failed to set %s in memcache: %v", mk, err)
}
}
示例15: Get
func (this *Memcache) Get(key string, timeout time.Duration, callback func() ([]byte, error)) ([]byte, error) {
cached, err := mCache.Get(this.ctx, key)
if err != nil {
if err == mCache.ErrCacheMiss {
cbValue, cbErr := callback()
if cbErr != nil {
return []byte(""), cbErr
}
cached = &mCache.Item{
Key: key,
Value: cbValue,
Expiration: timeout,
}
err = mCache.Set(this.ctx, cached)
if err != nil {
return []byte(""), err
}
} else {
return []byte(""), err
}
}
return cached.Value, nil
}