我们正在开发一个部分用Java编写的AppEngine应用程序,部分用Python编写(不同版本使用不同的语言)。 我想知道我是否可以在Python端使用ndb数据库,以访问与Java代码共享的一些模型。
具体来说,当从Java端更新实体时,该实体的ndb缓存值是否自动失效?显然,这是必不可少的,否则ndb会返回之前的值。
此外,如果在ndb中写入提交(返回),那么在按键检索时,Java端是否可以立即使用该值?我读到一旦缓存失效就会返回一个ndb写入,这不能保证数据可以通过Java端的密钥检索。
答案 0 :(得分:3)
正如您所怀疑的那样,由于Java数据存储区API不了解NDB的缓存,因此如果您希望Python代码立即看到Java进程所做的更改,则必须关闭该缓存。可以仅针对特定请求关闭缓存(例如key.get(use_memcache = False))或仅针对特定模型关闭缓存(将_use_memcache = False添加为类变量)。
Java看到通过NDB进行的更改没有问题。我不知道你在哪里阅读,但是在将数据写入数据存储区之前NDB返回是不正确的(除非你使用异步写入并且永远不会等待响应 - 但即使如此,基础设施也会等待在向用户返回HTTP响应之前写入成功。)
写入事件的实际顺序如下:
(memcache条目在下次阅读时更新。)