2011-02-25 310 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在那裏動態配置,您無法控制它們,並且很可能與其他應用程序共享。所以你不應該假設你放的東西可能不會一直留在緩存中。這是打/小姐比賽。