保存memcache数据后,GAE上立即可用吗?

1 投票
3 回答
734 浏览
提问于 2025-04-16 12:50

在Google App Engine(使用Python)上,我需要用memcache来保存数据,并且希望能快速在另一个页面读取这些数据。

不过在我开始写代码,让memcache保存数据之前,我有些担心:在下一个页面打开时,这些数据会不会一直存在?缓存数据需要多长时间,才能确保在下一个页面读取时能找到?这是因为它是云服务的问题吗?还是说即使在同一服务器上也会有这个问题?或者根本就没有问题,我可以放心地在下一个页面找到这些数据?

注意:这个方法并不是我整个网页应用的核心,只是我在某个特定情况下需要用到的。此外,在这个情况下,我不想通过查询字符串、cookies或头部值来在页面之间保存数据。

3 个回答

2

实际上,这些数据大部分时间可能都会存在,但你不能完全依赖它们,这就是设计的初衷——可以参考文档

不过,当你考虑是否只把一个值存储在内存缓存(memcache)中,而不使用其他持久存储时,一定要确保你的应用在这个值突然不可用时还能正常工作。值可能随时会从内存缓存中消失,而且可能会在设定的过期时间之前就消失。例如,如果用户的会话数据突然消失会导致会话出现问题,那么这些数据应该除了存储在内存缓存外,还应该存储在数据库中。

(强调是我的)

3

我觉得GAE(Google App Engine)里的memcached实现没有什么特别之处,所以一旦你设置了缓存的值,它们会立刻可用。也就是说,下一个页面就能用到这些值,除非它们过期了,因为memcached服务器达到了内存限制。谷歌似乎并不限制你可以在memcache中存储的数据量,只限制你可以发出的请求数量,所以实际上我觉得这不是个问题。

依赖缓存值总是可用并不是个好习惯,通常你应该使用下面这种模式。

key = generate_key()
value = memcache.get(key)
if value is None:
    value = generate_value()
    memcache.set(key, value)
3

分布式的memcache架构有一组memcache实例,这些实例为所有的Google App Engine应用提供服务;存储的数据不会在memcache服务器之间复制。

在成功将数据保存到memcache后,你的数据会一直存在*,因为它是存储在一个特定的memcache实例中的,后续的请求都可以访问到这份数据。

* 需要注意的是:如果内存不足,缓存中的数据可能会被清除。

撰写回答