gpt4 book ai didi

python - 强制 Memcache 中的项目立即可用

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:17 25 4
gpt4 key购买 nike

使用 Google App Engine NDB,内存缓存的大多数方面都会自动处理。但是,只有在至少读取一次项目后,该项目才会在 Memcache 中变得可用。因此,首先必须使用 get 读取该项目,然后 memcache 存储它。 Put() 将其从内存缓存中删除。

但是,我需要在放置时立即在内存缓存中提供一些可用的东西。我是内存缓存新手,所以我不完全确定一切在幕后是如何工作的,但有两种方法可以做到这一点:

  1. 在实体的 put() 之后立即执行 get(),以便它在内存缓存中可用。
  2. 紧接着 put() 之后,手动将项目设置到内存缓存中。这是有道理的,但我不确定这种方法是否有任何问题。如果我在内存缓存中手动设置某些内容,这会干扰 NDB 自动内存缓存处理的其余部分吗?此外,在手动设置内存缓存中的某些内容时,我应该使用什么键,以便在获取时,自动内存缓存处理程序知道要查找什么?

最佳答案

我怀疑你指的是这个:

Memcache does not support transactions. Thus, an update meant to be applied to both the Datastore and memcache might be made to only one of the two. To maintain consistency in such cases (possibly at the expense of performance), the updated entity is deleted from memcache and then written to the Datastore. A subsequent read operation will find the entity missing from memcache, retrieve it from the Datastore, and then update it in memcache as a side effect of the read. Also, NDB reads inside transactions ignore the Memcache.

因此,如果您需要放置一些可用的东西,那么您必须自己将其缓存在内存缓存中。

这让我们想到了 2)

如果您在内存缓存中手动设置某些内容,据我所知,它不会以任何方式与 NDB 的自动缓存交互。另外,据我所知,您无法使用自动版本能够自动使用的 key 设置手动内存缓存条目。

您只需围绕您明确控制的内容构建一层内存缓存即可。每次执行 put 操作时,您都会使用一个函数,将其放入数据存储区,然后放入内存缓存,如果需要,则使现有条目无效。同样,对于 get,您首先尝试 memcache,然后回退到数据存储。这听起来几乎与 NDB 已经为您所做的一模一样!

也许可以查看策略功能选项以进行更精细的控制: https://developers.google.com/appengine/docs/python/ndb/cache#policy_functions

但是不要忘记,上下文缓存很可能已经完成了您想要的操作:

The in-context cache persists only for the duration of a single incoming HTTP request and is "visible" only to the code that handles that request. It's fast; this cache lives in memory. When an NDB function writes to the Datastore, it also writes to the in-context cache. When an NDB function reads an entity, it checks the in-context cache first. If the entity is found there, no Datastore interaction takes place.

Queries do not look up values in any cache. However, query results are written back to the in-context cache if the cache policy says so (but never to Memcache).

因此,如果您的 put 和后续 get 发生在同一个请求中,则无论如何它都会从上下文缓存中出来。

关于python - 强制 Memcache 中的项目立即可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13224338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com