我想将一些应用程序配置条目保留为数据存储区中的实体。现在,当我从数据存储区查看器(开发环境)或Google Cloud Platform数据存储区用户界面(生产环境)更新这些条目时,应用程序看不到新值。这是因为 ndb 缓存了实体。
我的(非常开放)问题是:您在数据存储区中保留配置条目,从Google的用户界面更新它们以及为应用程序提供新值的技术是什么?
我想到了以下几点:
在定义配置条目的_memcache_timeout
子类上设置合理的ndb.Model
- 但在这种情况下,memcache的使用是次优的(执行不必要的数据存储读取)。
将缓存设置保持最大,但在应用程序的管理区域中执行flush
操作以单独刷新实体。这很棘手,因为您无法确定实体的实际缓存键。但通常情况应为_memcache_prefix + key.urlsafe()
,ndb.context module中定义了_memcache_prefix
。
从应用程序的管理区域更新所有配置条目,不要使用Google的数据存储区用户界面 - 这需要额外的努力。
答案 0 :(得分:2)
使用NDB客户端库在App Engine中实现您自己的管理模块。如果您通过自己的应用程序对实体进行更改,那么它自然会为您编写正确的内存缓存密钥。
正如您已经建议的那样,减少模型的最大缓存期限。例如,在大多数情况下允许更改生效前的1小时不是不合理的。
通过云控制台刷新整个缓存以获取内存缓存。
警告:如果你的规模很大,这是一个坏主意,因为它可能会导致请求大幅增加。例如,如果您在90%的缓存命中率后以100万次/秒的速度运行数据存储,那么在刷新后,您可能会立即达到1000万次读取/秒。