Google App Engine Memcache未快速更新

时间:2012-11-06 04:08:03

标签: google-app-engine optimization memcached

我一直在Google App Engine(Python)中使用Memcache已经有一段时间了,而且通常效果很好。在过去的几天里,虽然我已经注意到了一些代码,如下面的例子,当我更新数据库条目之后立即更新时,它没有及时得到它。这是由于将条目存储在数据库中所需的时间长度吗?有没有解决方案?

# I store the comment here 
c = Comment(content = content, submitter = submitter, group_id=int(group_id), user_id = user_id)
c.put()
# Right after I store the comment I refresh the cache
comment_cache(int(group_id), True)

通常最新的评论不在缓存中。

2 个答案:

答案 0 :(得分:2)

由于最终的一致性,如果comment_cache()运行查询(即,不通过密钥获取),那么您所描述的内容是预期的。

一些解决方案:

  1. 更改comment_cache()c作为参数,以便明确了解它:comment_cache(int(group_id), True, c)
  2. 在任务队列中运行comment_cache()。仍无法保证会收到新评论,但由于它会在一段时间后运行,可能会。

答案 1 :(得分:1)

我和你有同样的问题。

当我在数据库中添加一个值时,我更新了缓存,但由于查询需要很长时间才能运行,因此我的上一个插入值未插入缓存中。

我的解决方案:我有一个更新缓存的函数,现在我添加了我想要放入数据库的值作为参数:

def get_values_from_cache_or_database(particular_value = None, update = True):
  key = 'my_key'

  values = memcache.get(key)
    if values is None or update:
      values = db.GqlQuery("SELECT * FROM Table")
      values = list(values)
      if update:
        if particular_value not in values:
          # if we are here, particular_value isn't in your data base (because time 
          # request is  long) but we want the particular_value in the cache so we add 
          # it manually  
          values.append(particular_value)
  memcache.set(key, values)
  return values

因此,例如我们将值“value1”设置为: value1.put() 我们调用此函数以“value1”作为参数刷新缓存: get_values_from_cache_or_database(value1, True) 然后我们将为您的缓存添加最新的值!