问候!
我有一个 Google App Engine 设置,其中memcached
键的前缀os.environ['CURRENT_VERSION_ID']
是为了在部署时生成新的缓存,而不必手动刷新缓存。
这工作得很好,直到开发需要同时运行两个版本的应用程序。当然,这会导致缓存不一致。
我正在寻找有关如何为键添加前缀的建议。本质上,当部署任何版本时,都需要有一个跨版本变化的变量。(嗯,这不是很理想,因为缓存会完全耗尽。)
我在考虑以下几种可能性:
创建一个
RuntimeEnvironment
存储最新缓存前缀的实体。缺点:即使被缓存,也会减慢每个请求。不能缓存在内存中,只能缓存在 memcached 中,因为其他版本的部署可能会改变它。使用每个实体的版本号。这会产生非常好的粒度,因为缓存可以为未修改的实体保持温暖。缺点是我们需要在模型更改时推送到所有版本,我想避免这种情况,以便在部署到生产之前测试模型更改。
忘记键前缀。键的全局命名空间。编写脚本以在每次部署时刷新缓存。这实际上看起来和第一个想法一样好,如果不是更好的话:缓存在这两种情况下都被完全破坏了,而且这个避免了运行时实体的开销。
任何想法,不同的想法都非常感谢!