在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)
答案 0 :(得分:13)
Memcache本质上是不可靠的。它不能保证数据保存多长时间,甚至不能保证数据保持不变。您不应该使用它,期望它将始终在最短的时间内返回存储的数据。
答案 1 :(得分:1)
您需要做的是检查memcache是否具有您想要的缓存值(在您的情况下不是),否则您必须从数据存储区检索或重新计算。这是任何缓存的正常行为。
与较低级别的存储相比,缓存的存储通常更快但更小,但速度较慢但容量较大。
想象一下磁盘缓存,它比实际磁盘小。只能将较小的磁盘数据块提取到缓存中。这是一个命中/未命中率的问题,而不是管理缓存的有效性。
在GAE中,您的memcache在那里动态配置,您无法控制它们,并且很可能与其他应用程序共享。所以你不应该假设你放的东西可能不会一直留在缓存中。它是命中/错过的游戏。