【问题标题】:GAE Python NDB Datastore - No need for memcache.set?GAE Python NDB 数据存储 - 不需要 memcache.set?
【发布时间】:2016-07-03 12:41:16
【问题描述】:

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

NDB 使用 Memcache 作为数据中“热点”的缓存服务

我现在只使用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 的键

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

有后续格式化问题,将提出一个新问题。

【问题讨论】:

  • appstats 页面将显示 rpc 请求,以便您验证 memcache 获取/设置行为。
  • @JoshJ 谢谢,这听起来很有用,我会试试的。

标签: python google-app-engine google-cloud-datastore app-engine-ndb


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢丹尼尔,这节省了一些检查。你能帮我举一个简单的例子来说明如何将一个简单的键值设置到 Datastore 中吗?在文档中,我看到了 ndb.key,但不明白值在哪里。有没有像memcache,set() 这样的简单语法?我不想打扰祖先或任何东西,只是简单地放置键和值。
  • 假设你有一个 Book 模型,你可以用book = Book(name="The Hobbit", author="JRR Tokien") 创建一个没有祖先的新书,然后用book.put() 保存它。 put 调用返回密钥。
  • 谢谢。这里缺少一点Pyhon。不像memcache.set(),这里我要先新建一个class?即class Greeting(ndb.Model): 然后在我的MainPage 中使用它?我不能通过将简单的put 语句直接放在MainPage 中来使其更简单吗? (再次,回到我的 memcache.set() 示例,这对我来说更容易。
  • 除非它们在模型中,否则您不能将它们保存到数据存储中,不。
  • 或者更确切地说,您可以,但只能使用一些基本的 Entity 协议缓冲区类,但您绝对不想这样做。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2017-03-04
  • 2017-01-22
相关资源
最近更新 更多