我一直在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)
通常最新的评论不在缓存中。
答案 0 :(得分:2)
由于最终的一致性,如果comment_cache()
运行查询(即,不通过密钥获取),那么您所描述的内容是预期的。
一些解决方案:
comment_cache()
以c
作为参数,以便明确了解它:comment_cache(int(group_id), True, c)
。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)
然后我们将为您的缓存添加最新的值!