Я перемещаю веб-приложение Google App Engine из «облака» в стандартную веб-среду ( webpy ), и мне хотелось бы узнать, как реализовать функцию memcache доступно в Gae.
В моем приложении я просто использую этот кеш для хранения набора данных, извлекаемых из удаленного API каждые X часов;другими словами, я не слишком подчеркиваю этот кеш.
Я наивно реализовал что-то вроде этого:
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
Типичное использование будет:
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
Как я могу улучшить это?
Могу ли янужно сделать это Thread-Safe?