1

我开始使用 NDB,因为它提供了一些非常好的功能,并且通常应该比我通过自己的缓存层实现时更优化。

但是,我不了解 key.get() 等简单操作的所有情况。Appstats 显示,在这样的操作过程中,在刚刚启动的开发服务器上,进行了 4 次 RPC:

@434ms memcache.Get real=1ms api=0ms
@437ms memcache.Set real=1ms api=0ms
@438ms memcache.Get real=2ms api=0ms
@441ms datastore_v3.Get real=4ms api=0ms

为什么我们有 2 个 memcache.Get 操作?为什么 memcache.Set 出现在 datastore_v3.Get 之前?我使用默认的缓存选项。查看 ndb.context.get 可以提供一些见解,但我仍然感到困惑。memcache.Set 是关于 LOCK 的。但是两个 Get 调用看起来相同,为什么在数据存储 Get 之后没有 Set?

4

1 回答 1

2

您是否在顶级函数或 WSGI 应用程序对象周围使用了 @ndb.toplevel()?一个常见的问题是,如果您忽略它,则永远不会执行实际的 Set 调用。请参阅http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=105(点击评论 5 中的群组链接!)。

于 2012-04-18T04:54:26.953 回答