Das Paket "memcache" bietet einen Client für den verteilten Speicher von Schlüsselwerten im Arbeitsspeicher von App Engine für kleine Blöcke beliebiger Daten.
Die grundlegenden Operationen dienen für "get"- und "set"-Vorgänge, mit einer Zeichenfolge als Schlüssel.
item0, err := memcache.Get(c, "key") if err != nil && err != memcache.ErrCacheMiss { return err } if err == nil { fmt.Fprintf(w, "memcache hit: Key=%q Val=[% x]\n", item0.Key, item0.Value) } else { fmt.Fprintf(w, "memcache miss\n") }
und
item1 := &memcache.Item{ Key: "foo", Value: []byte("bar"), } if err := memcache.Set(c, item1); err != nil { return err }
Variablen
ErrCacheMiss, ErrCASConflict, ErrNoStats, ErrNotStored, ErrServerError
var (
// ErrCacheMiss means that an operation failed
// because the item wasn't present.
ErrCacheMiss = errors.New("memcache: cache miss")
// ErrCASConflict means that a CompareAndSwap call failed due to the
// cached value being modified between the Get and the CompareAndSwap.
// If the cached value was simply evicted rather than replaced,
// ErrNotStored will be returned instead.
ErrCASConflict = errors.New("memcache: compare-and-swap conflict")
// ErrNoStats means that no statistics were available.
ErrNoStats = errors.New("memcache: no statistics available")
// ErrNotStored means that a conditional write operation (i.e. Add or
// CompareAndSwap) failed because the condition was not satisfied.
ErrNotStored = errors.New("memcache: item not stored")
// ErrServerError means that a server error occurred.
ErrServerError = errors.New("memcache: server error")
)
Gob, JSON
var (
// Gob is a Codec that uses the gob package.
Gob = Codec{gobMarshal, gobUnmarshal}
// JSON is a Codec that uses the json package.
JSON = Codec{json.Marshal, json.Unmarshal}
)
Funktionen
func Add
"Add" schreibt das angegebene Element, wenn nicht bereits ein Wert für seinen Schlüssel vorhanden ist. "ErrNotStored" wird zurückgegeben, wenn diese Bedingung nicht erfüllt ist.
func AddMulti
„AddMulti“ ist eine Batchversion von „Add“. Es kann „appengine.MultiError“ zurückgegeben werden.
func CompareAndSwap
Mit "CompareAndSwap" wird das betreffende Element geschrieben, das zuvor durch "Get" zurückgegeben wurde, wenn der Wert zwischen dem "Get"-Aufruf und dem "CompareAndSwap"-Aufruf weder geändert noch entfernt wurde. Der Schlüssel ("Key") des Elements darf sich zwischen den Aufrufen nicht ändern, alle anderen Elementfelder können sich jedoch unterscheiden. "ErrCASConflict" wird zurückgegeben, wenn der Wert zwischen den Aufrufen geändert wurde. "ErrNotStored" wird zurückgegeben, wenn der Wert zwischen den Aufrufen entfernt wurde.
func CompareAndSwapMulti
„CompareAndSwapMulti“ ist eine Batchversion von „CompareAndSwap“. Es kann „appengine.MultiError“ zurückgegeben werden.
func Delete
"Delete" löscht das Element für den gegebenen Schlüssel. Wenn das angegebene Element nicht gefunden werden kann, wird "ErrCacheMiss" zurückgegeben. Der Schlüssel darf maximal 250 Byte lang sein.
func DeleteMulti
"DeleteMulti" ist eine Batch-Version von "Delete". Wenn keine Schlüssel gefunden werden können, wird der Fehler „appengine.MultiError” zurückgegeben. Jeder Schlüssel darf maximal 250 Byte lang sein.
func Flush
"Flush" löscht alle Elemente aus Memcache.
func GetMulti
"GetMulti" ist eine Batch-Version von "Get". Die zurückgegebene Zuordnung zwischen Schlüsseln und Elementen kann weniger Elemente aufweisen als das Eingabesegment. Der Grund sind mögliche Cache-Fehler bei Memcache. Jeder Schlüssel darf maximal 250 Byte lang sein.
func Increment
func Increment(c context.Context, key string, delta int64, initialValue uint64) (newValue uint64, err error)
"Increment" erhöht schrittweise den Dezimalwert im angegebenen Schlüssel automatisch um einen Deltawert und gibt den neuen Wert zurück. Der Wert muss mit einem Uint64-Wert kompatibel sein. Der Überlauf wird umschlossen und der Unterlauf auf null begrenzt. Das festgelegte Delta kann negativ sein. Wenn der Schlüssel in Memcache nicht vorhanden ist, wird dafür der angegebene Anfangswert ungeteilt verwendet, bevor das Delta angewendet wird. Der Schlüssel darf maximal 250 Byte lang sein.
func IncrementExisting
"IncrementExisting" funktioniert wie "Increment", mit dem Unterschied, dass der Schlüssel bereits in Memcache vorhanden ist und keinen Ausgangswert annimmt. "IncrementExisting" kann Nutzungszeit einsparen, wenn die Berechnung des Ausgangswerts teuer ist. Wenn das angegebene Element nicht gefunden werden kann, wird ein Fehler zurückgegeben.
func PeekMulti
PeekMulti ist eine Batchversion von Peek. Sie ähnelt GetMulti, füllt aber zusätzlich „Item.Timestamps“ aus.
func Set
Mit "Set" wird das betreffende Element ohne Bedingungen geschrieben.
func SetMulti
„SetMulti“ ist eine Batchversion von „Set“. Es kann „appengine.MultiError“ zurückgegeben werden.
Codec
type Codec struct {
Marshal func(interface{}) ([]byte, error)
Unmarshal func([]byte, interface{}) error
}
„Codec” steht für ein symmetrisches Paar von Funktionen, die einen Codec implementieren. Für Elemente, die mithilfe eines Codec in Memcache gespeichert bzw. aus daraus abgerufen werden, wird ein Marshalling bzw. Unmarshalling der Werte ausgeführt.
Alle für Codec bereitgestellten Methoden verhalten sich entsprechend der gleichnamigen Funktion auf Paketebene.
func (Codec) Add
"Add" schreibt das angegebene Element, wenn nicht bereits ein Wert für seinen Schlüssel vorhanden ist. "ErrNotStored" wird zurückgegeben, wenn diese Bedingung nicht erfüllt ist.
func (Codec) AddMulti
„AddMulti“ ist eine Batchversion von „Add“. Es kann „appengine.MultiError“ zurückgegeben werden.
func (Codec) CompareAndSwap
Mit "CompareAndSwap" wird das betreffende Element geschrieben, das zuvor durch "Get" zurückgegeben wurde, wenn der Wert zwischen dem "Get"-Aufruf und dem "CompareAndSwap"-Aufruf weder geändert noch entfernt wurde. Der Schlüssel ("Key") des Elements darf sich zwischen den Aufrufen nicht ändern, alle anderen Elementfelder können sich jedoch unterscheiden. "ErrCASConflict" wird zurückgegeben, wenn der Wert zwischen den Aufrufen geändert wurde. "ErrNotStored" wird zurückgegeben, wenn der Wert zwischen den Aufrufen entfernt wurde.
func (Codec) CompareAndSwapMulti
„CompareAndSwapMulti“ ist eine Batchversion von „CompareAndSwap“. Es kann „appengine.MultiError“ zurückgegeben werden.
func (Codec) Get
„Get“ ruft das Element für den angegebenen Schlüssel ab und decodiert den erhaltenen Wert in „v“. „ErrCacheMiss“ wird bei einem Memcache-Cache-Fehler zurückgegeben. Der Schlüssel darf maximal 250 Byte lang sein.
func (Codec) Set
Mit "Set" wird das betreffende Element ohne Bedingungen geschrieben.
func (Codec) SetMulti
„SetMulti“ ist eine Batchversion von „Set“. Es kann „appengine.MultiError“ zurückgegeben werden.
Element
type Item struct {
// Key is the Item's key (250 bytes maximum).
Key string
// Value is the Item's value.
Value []byte
// Object is the Item's value for use with a Codec.
Object interface{}
// Flags are server-opaque flags whose semantics are entirely up to the
// App Engine app.
Flags uint32
// Expiration is the maximum duration that the item will stay
// in the cache.
// The zero value means the Item has no expiration time.
// Subsecond precision is ignored.
// This is not set when getting items.
Expiration time.Duration
// ItemTimestamps are server values only returned when calling Peek and PeekMulti.
// The timestamps are nil when calling Get and GetMulti.
Timestamps ItemTimestamps
// contains filtered or unexported fields
}
"Item" ist die Einheit für "get"- und "set"-Vorgänge in Memcache.
func Get
Mit "Get" wird das Element für den betreffenden Schlüssel abgerufen. „ErrCacheMiss” wird bei einem Cache-Fehler bei Memcache zurückgegeben. Der Schlüssel darf maximal 250 Byte lang sein.
func Peek
Peek ruft das Element für den angegebenen Schlüssel ab und füllt zusätzlich das Element „Item.Timestamps“ aus. „ErrCacheMiss” wird bei einem Cache-Fehler bei Memcache zurückgegeben. Der Schlüssel darf maximal 250 Byte lang sein.
ItemTimestamps
type ItemTimestamps struct {
// Expiration is related to Item.Expiration but it is a Time (not a Duration),
// provided by the server. It is not meant to be set by the user.
Expiration *time.Time
// LastAccess is the last time the Item was accessed.
LastAccess *time.Time
}
„ItemTimestamps“ sind optional vom Server bereitgestellte Zeitstempel. Siehe Peek und PeekMulti.
Statistiken
type Statistics struct {
Hits uint64 // Counter of cache hits
Misses uint64 // Counter of cache misses
ByteHits uint64 // Counter of bytes transferred for gets
Items uint64 // Items currently in the cache
Bytes uint64 // Size of all items currently in the cache
Oldest int64 // Age of access of the oldest item, in seconds
}
"Statistics" stellt eine Menge an Statistiken über den Memcache-Cache dar. Diese kann Elemente enthalten, die abgelaufen sind, aber noch nicht aus dem Cache entfernt wurden.
func Stats
func Stats(c context.Context) (*Statistics, error)
"Stats" ruft die aktuellen Memcache-Statistiken ab.