我开始使用 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?