Ich bin eine Google App Engine-Webanwendung außerhalb der "Cloud" zu einem Standard-Web-Framework (webpy) und ich würde gerne wissen, wie ein Feature auf Gae zu implementieren.Hausgemachte winzige Memcache
In meiner App verwende ich nur diesen Cache, um eine Reihe von Daten aus einer Remote-API alle X Stunden gespeichert zu speichern; Mit anderen Worten, ich betone diesen Cache nicht zu sehr.
Ich habe naiv so etwas wie dies umgesetzt:
class TinyCache():
class _Container():
def __init__(self, value, seconds):
self.value = value
self.cache_age = datetime.now()
self.cache_time = timedelta(seconds = seconds)
def is_stale(self):
return self.cache_age + self.cache_time < datetime.now()
def __init__(self):
self.dict_cache={}
def add(self, key, value, seconds = 7200):
self.dict_cache[key] = self._Container(value, seconds)
def get(self, key):
if key in self.dict_cache:
if self.dict_cache[key].is_stale():
del self.dict_cache[key]
return None
else:
return self.dict_cache[key].value
else:
return None
Eine typische Anwendung wäre:
data = tinycache.get("remote_api_data")
if data is not None:
return data
else:
data = self.api_call()
tinycache.add("remote_api_data", data, 7200)
return data
Wie könnte ich es verbessern?
Muss ich es Thread-sicher machen?
Die meisten "Standard-Web-Frameworks" unterstützen das Anhängen an ein Cache-Backend ... Warum nicht einen Wrapper implementieren, der das GAE-Backend versucht, und falls nicht verfügbar, fällt es zurück auf 'memcached' (oder die Django Cache API, wenn Sie gerade Django benutzen). Haben Sie Zugriff auf eine Memcache-Instanz "out of the cloud"? –
Nein, memcached ist keine Option, da es nicht von meinem Provider unterstützt wird. Auch GAE Backend ist keine Option zu ... Warum brauche ich so eine längliche Rundreise für etwas, das schnell sein muss? – systempuntoout