【问题标题】:Google App Engine MemcacheGoogle App Engine 内存缓存
【发布时间】:2011-02-25 01:37:50
【问题描述】:

在 GAE 中使用 memcache 时,我很少注意到这种奇怪的行为。我在 memcache 中设置了一个值,当我尝试检索相同的值时,我得到 None 而不是原始值。内存缓存值不可能在这么短的时间内过期。当我在 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)

【问题讨论】:

  • 请您发布设置和检索值的代码吗?

标签: google-app-engine memcached


【解决方案1】:

Memcache 本质上是不可靠的。它不保证它将保留数据多长时间,甚至不保证它会保留数据。您不应该期望它总是在某个最短期限内返回存储的数据。

【讨论】:

  • 现在有专用的(但付费的)缓存,它是 0.06 美元/GB/小时。但是还没有测试过。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多