Sto spostando un'applicazione web di Google App Engine all'esterno del "cloud" in un framework Web standard (webpy) e vorrei sapere come implementare una funzione memcache disponibile su Gae.Memcache minuscoli fatti in casa
Nella mia app uso solo questa cache per archiviare una serie di dati recuperati da una API remota ogni X ore; in altre parole non sottolineo troppo questo cache.
ho ingenuamente implementato qualcosa di simile:
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
Un utilizzo tipico potrebbe essere:
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
Come potrei migliorare?
Devo renderlo thread-safe?
La maggior parte del supporto "standard web framework" che si collega a un back-end cache ... Perché non implementare un wrapper che tenta il backend GAE, e se non è disponibile, torna a 'memcached' (o all'API di Django Cache, se ti capita di usare Django). Avete accesso a un'istanza di memcache "out of the cloud"? –
No, memcached non è un'opzione perché non è supportato dal mio provider. Inoltre, anche il backend GAE non è un'opzione ... perché ho bisogno di un viaggio così lungo per qualcosa che deve essere veloce? – systempuntoout