App Engine:是否有一个很好的通用工具来缓存数据存储对象?

时间:2012-01-24 18:42:43

标签: python google-app-engine

我正在为我的所有Google App Engine数据存储类编写一个超类,看起来像这样:

class MemcacheMixin(object):
    @classmethod
    def cache_get_by_id(cls, id, parent=None):
        if memcache.has_key(...):
            ...
    ...

class MyEntity(db.Model, MemcacheMixin):
    ...

obj = MyEntity.cache_get_by_id(...)

我的想法是,我几乎总是想要缓存数据存储对象,我不想重复自己。我假设有人必须已经解决了这个问题并编写了一个通用工具来缓存这些东西,这些工具可以很好地集成到数据存储类的工作方式。

但是,我还没有找到它。有什么建议吗?

2 个答案:

答案 0 :(得分:9)

NDB(Guido的新数据存储库开发人员,包含在App Engine 1.6.1 SDK中)内置了(内存缓存和内存)缓存设施。

有关详细信息,请参阅documentation

答案 1 :(得分:2)

你可能正在寻找的是一个memoization装饰器。这是一个很好的简单例子:

http://code.google.com/p/appengine-afterburner/source/browse/trunk/python/src/afterburner/experimental/memoize.py

还建议缓存协议缓冲区而不是模型实例,以提高性能:

http://blog.notdot.net/2009/9/Efficient-model-memcaching