【发布时间】:2012-11-05 00:07:05
【问题描述】:
使用 Google App Engine NDB,memcache 的大部分方面都是自动处理的。但是,一个项目在被读取至少一次之前不会在 Memcache 中可用。所以首先必须使用 get 读取项目,然后 memcache 存储它。 Put() 将其从内存缓存中删除。
但是,我需要一些东西在放置后立即在 memcache 中可用。我是 memcache 的新手,所以我不完全确定幕后一切是如何运作的,但有两种方法可以做到这一点:
- 在实体的 put() 之后立即执行 get(),以便它在内存缓存中可用。
- 在 put() 之后立即手动设置内存缓存中的项目。这是有道理的,但我不确定这种方法是否有任何问题。如果我在 memcache 中手动设置某些内容,这会干扰 NDB 的其余自动 memcache 处理吗? 另外,在手动设置内存缓存中的内容时我应该使用什么键,以便在获取时,自动内存缓存处理程序知道要查找什么?
【问题讨论】:
-
“但是,一个项目在被读取至少一次之前不会在 Memcache 中可用。” - “可用”是什么意思?数据在您存储后立即可用;检索与它无关。
-
@NickJohnson 我指的是 Guido 在这个问题中的评论:stackoverflow.com/a/11595586/458960
-
啊,所以你说的是 NDB 使用 memcache 来缓存模型。为什么不让它按照预期的方式工作,并在第一次获取时将其自身插入内存缓存中?
-
@NickJohnson 我正在运行一个非常大的 IN 查询,我根本不想使用数据存储。所以我需要这些项目立即在 memcache 中可用。我最终做的只是手动处理内存缓存。比我预期的要容易得多,这样更有意义
-
NDB 不使用(实际上,不能使用)memcache 来满足 IN 查询,所以我担心你的优化是没有意义的。
标签: python google-app-engine memcached