Google App Engine Memcache

时间:2011-02-25 01:37:51

标签: google-app-engine memcached

在GAE中使用memcache时,我很少注意到这种奇怪的行为。我在memcache中设置了一个值,当我尝试检索相同的值时,我得到None而不是原始值。 memcache值在这么短的时间内不能过期。我确保在memcache中设置值时返回True。还有什么可以导致memcache值丢失?这是一种常见的系统行为吗?

代码示例:

用于设置值

cache_set = memcache.set(matrix_name+'-'+str(m)+","+str(n),data[n],namespace=uuid)
while cache_set == False :
    sleep(0.1)
    logging.error(" Cache Set failed. Retrying for %s %s",matrix_name,str[m,n])
    cache_set = memcache.set(matrix_name+'-'+str(m)+","+str(n),data[n],namespace=uuid)

用于检索值

memcache.get(matrix_name+'-'+str(m)+","+str(n),namespace=uuid)

2 个答案:

答案 0 :(得分:13)

Memcache本质上是不可靠的。它不能保证数据保存多长时间,甚至不能保证数据保持不变。您不应该使用它,期望它将始终在最短的时间内返回存储的数据。

答案 1 :(得分:1)

您需要做的是检查memcache是​​否具有您想要的缓存值(在您的情况下不是),否则您必须从数据存储区检索或重新计算。这是任何缓存的正常行为。

与较低级别的存储相比,缓存的存储通常更快但更小,但速度较慢但容量较大。

想象一下磁盘缓存,它比实际磁盘小。只能将较小的磁盘数据块提取到缓存中。这是一个命中/未命中率的问题,而不是管理缓存的有效性。

在GAE中,您的memcache在那里动态配置,您无法控制它们,并且很可能与其他应用程序共享。所以你不应该假设你放的东西可能不会一直留在缓存中。它是命中/错过的游戏。