Ich habe einige Apps mit dem Google App Engine Go SDK entwickelt, die Memcache als Puffer zum Laden von Daten aus dem Datenspeicher verwenden. Da das Memcache nur Daten als []byte
speichern kann, finde ich oft Funktionen, um die verschiedenen Strukturen als Strings zu codieren, und es funktioniert auch, um den Prozess umzukehren. Unnötig zu sagen, dass es ziemlich mühsam ist, wenn ich diese Art von Dingen fünfmal wiederholen muss.
Gibt es eine einfache Möglichkeit, eine beliebige Struktur, die in Datastore gespeichert werden kann, in []byte
zu konvertieren, um sie in Memcache zu speichern und dann wieder zu laden, ohne benutzerdefinierten Code für verschiedene Strukturen in GAE Golang erstellen zu müssen?
Ссылка oder Ссылка kann beliebige Datentypen in [] Byte-Slices umwandeln, wenn bestimmte Regeln für die codierten Datenstrukturen gelten. Sie wollen wahrscheinlich eine von ihnen wird Gob zu kleineren Größen kodieren, aber Json ist leichter mit anderen Sprachen gemeinsam, wenn das eine Voraussetzung ist.
Ich habe festgestellt, dass ich das Gleiche brauche. Also habe ich ein Paket namens:
erstellt go get github.com/scotch/aego/ds
Es verwendet die gleiche API wie die "appengine/datastore"
, so dass es als Ersatz verwendet wird.
Standardmäßig werden alle Put
s und Get
s in Memcache zwischengespeichert. Sie können dieses Verhalten jedoch ändern, indem Sie das ds.Register
Methode:
Die Register
-Methode verwendet eine Zeichenfolge, die Kind
darstellt. und 3 bool
- userDatastore
, useMemcache
, useMemory
. Wenn Sie einen Wert für true
übergeben, wird AEgo/ds
den Datensatz für diesen Speicher beibehalten. Der Memory
-Speicher ist nützlich für Datensätze, die nicht geändert werden sollen. Er kann jedoch veraltete Daten enthalten, wenn mehr als eine Instanz ausgeführt wird.
Unterstützte Methoden sind:
%Vor% Hinweis: Derzeit erfolgt die Einlösung nur mit Get
. GetMulti
wird vom Datenspeicher abgerufen.
AEGo/ds
ist in Arbeit, aber der Code ist gut getestet. Jede Rückmeldung wäre willkommen.
Und um Ihre Frage zu beantworten, habe ich die Entitäten serialisiert für die Memcache-Persistenz zu gob .
Tags und Links serialization memcached data-structures go google-app-engine