GAE Python NDB 数据存储 - 不需要 memcache.set?

GAE Python NDB Datastore - No need for memcache.set?

文档 (https://cloud.google.com/appengine/docs/python/ndb/) 指出

NDB uses Memcache as a cache service for "hot spots" in the data

我现在只使用 memcache 如下: memcache.set(key=(id), value=params, time=0)

它经常过期(自动刷新),所以我想使用 NDB 数据存储。 我以为我必须始终将键值放在 NDB 和 Memcache 中,然后检查两者。 这是 NDB 自动完成的吗?

即。 ancestor_key = ndb.Key("Book", guestbook_name or "*notitle*")

greetings = Greeting.query_book(ancestor_key).fetch(20)

这会隐式设置 Memcache 吗?

当我从 NDB 读取时,它会隐含地先尝试 memcache.get(key) 吗?

感谢您的耐心等待。

编辑 - 我试过的:

作为测试,我尝试了这样的事情:

class Book(ndb.Model):
    content = ndb.StringProperty() 

class update(webapp2.RequestHandler): 
    def post(self): 
        p1='1' 
        p2='2' 
        p3='3' 
        p4='4' 
        p5='5' 
        id='test'
        paramarray = (p1,p2,p3,p4,p5) 

        book = Book(name=id,value=paramarray) 
        # OR likes this -  book = Book(ndb.Key(id),value=paramarray)          
        book.put() 

两个版本都出错了。 尝试使用 paramarray

的值获取 var id 的键

编辑 2 丹尼尔,谢谢你所做的一切。

有跟进格式问题,会问一个新问题。

是;请参阅 ndb caching 上的完整文档。基本上,每次写入都缓存在请求本地上下文缓存和主 memcached 存储中;在回退到实际数据存储之前,按键获取将首先在两个缓存中查找。

编辑 我不明白为什么你认为你的例子会起作用。您定义了一个带有 content 属性 的模型,但随后尝试在其上设置 namevalue 属性;自然会失败。

您应该阅读 ndb documentation,它很好地介绍了如何使用模型 class。