2011-02-25 265 views
8

在GAE中使用memcache时,我很少注意到这种奇怪的行为。我在memcache中设置了一个值,当我尝试检索相同的值时,我得到None而不是原始值。 memcache值不能在如此短的时间内过期。我确实在我设置memcache中的值时返回True。还有什么可以导致memcache值丢失?这是一种常见的系统行为吗?Google App Engine 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) 
+1

请问您是否要发布设置和检索值的代码? – 2011-02-25 02:02:21

回答

13

Memcache的是其本质不可靠的。它并不能保证它将保存数据的时间长短,甚至不会保留数据。您不应该使用它,因为它会始终在最短的时间内返回存储的数据。

+0

现在有专用(但付费)的缓存,它是0.06美元/ GB /小时。但是没有测试过。 – Jonny 2014-07-18 06:46:20

1

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

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

想象一下磁盘缓存,它比实际的磁盘小得多。只有较小的磁盘数据块可以被提取到缓存中。这是一个命中/未命中率比支配缓存效率的问题。

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