首先,我從內存緩存中檢索對象:更新從memcache檢索的對象屬性是否更新數據存儲中的屬性?
player = memcache.get('%s' % id)
然後我更新的屬性之一:
player.score = newScore
我已經做了一些測試,它似乎因爲它這兩條線改變屬性player.score在我的數據存儲中。現在,我對memcache瞭解不多,但我不期望這種行爲。
謝謝。
首先,我從內存緩存中檢索對象:更新從memcache檢索的對象屬性是否更新數據存儲中的屬性?
player = memcache.get('%s' % id)
然後我更新的屬性之一:
player.score = newScore
我已經做了一些測試,它似乎因爲它這兩條線改變屬性player.score在我的數據存儲中。現在,我對memcache瞭解不多,但我不期望這種行爲。
謝謝。
要保存更新選手對象的變化,再次把它的數據存儲:
player.score = newScore
player.put()
既然你使用Python,我認爲你看到的NDB caching,具體而言,memcache-backed caching效果。
所以是的,行爲是預期的。
顯然不是,因爲OP和BDFL都說代碼沒有使用NDB。
我是否在使用Python時自動使用NDB?它在文檔中說它是數據存儲的替代品,並且我正在使用數據存儲... – dafeda
它不是數據存儲的替代品,它是一個前提條件。您正在使用您在文件中導入的任何內容。如果您導入了NDB,則您正在使用NDB。如果你使用(ndb.something)製作你的模型tempalte,那麼你正在使用NDB。 –
我們無法從目前給出的代碼中判斷OP是否使用NDB,但我的猜測並不是 - 如果他使用的是NDB,他不會直接在memcache中存儲實例;他會使用NDB的memcache集成。 –
道歉,我的確在做 player.put()。 即使從memcache檢索到對象,player.put()是否更新我的數據存儲? 謝謝。 – dafeda
是的,但只有在對它執行第一個put()之後緩存該對象。首先把對象獲得它的Key,它保存在實體中。在已有密鑰的實體上調用put()是更新操作。 –
我首先將玩家添加到數據存儲並運行player.put()。接下來,我從memcache中檢索它,更新一個屬性並再次運行player.put()。因此,根據您剛纔所說的內容,數據存儲中的屬性也應該更新。 謝謝。 – dafeda