これまで私もこの問題を抱えていました。 最後に、私はRedisを使用します。
werkeug
には、Redisを使いやすくするキャッシュlibがあります。詳細については、
from werkzeug.contrib.cache import RedisCache
、あなたのアプリケーションを単一のプロセスで実行されている場合、ところでdoc
を参照してください(マルチスレッドでもOKです)、あなただけの以下のコードを使用することができます。
class CachedItem:
def __init__(self, item, duration):
self.item = item
self.duration = duration
self.time_stamp = time.time()
def __repr__(self):
return '<CachedItem {%s} expires at: %s>' % (self.item, time.time() + self.duration)
class CachedDict(dict):
def __init__(self, *args, **kwargs):
super(CachedDict, self).__init__(*args, **kwargs)
self.lock = threading.Lock()
def get_cache(self, key, default=None, duration=300):
with self.lock:
self._clean()
if key in self:
return self[key].item
else:
self[key] = CachedItem(default, duration)
return self[key].item
def set_cache(self, key, value, duration=300):
with self.lock:
self[key] = CachedItem(value, duration)
def _clean(self):
for key in list(self.keys()): # [self.keys()] error, we get dict_keys type
if self[key].time_stamp + self[key].duration <= time.time():
self.pop(key)
Flaskキャッシュキャッシュ要求への応答。 lru_cacheは関数の戻り値をキャッシュするため、CacheToolsにはさまざまなキャッシュ方法が用意されています。私は春のブートが何をしているのか分かりませんが、あなたが必要としている場所やキャッシュする内容に依存し、単一の解決策はありません。 – syntonym
こんにちは、私は基本的に私の要求が一意になるため、要求よりもむしろデータをキャッシュしたいと思っています。 – xmen