5

Örnek:strateji/desen Memcache'ı GAE/üzerinde kayıp güncelleme/yaşanabilecek çakışmaları önlemek için

  1. Süreç A - bir varlığın en son sürümünü alır - Memcache'ı
  2. Süreç B'den bir varlığın en son sürümünü alır Memcache'i
  3. yöntem A - (1) ve db sonra puts/memcache'den alınan varlığa bir güncelleme yapar
  4. Proses B - (2) ve db sonra puts/memcache'den alınan varlığa bir güncelleme yapar

Güncelleme 3. kaybolur.

hangi strateji/desen bunu önlemek için kullanılabilir?

cevap

2

Muhtemelen cas ve gets komutlarını kullanmak istiyorum:

https://code.google.com/p/memcached/wiki/NewCommands#cas

DÜZENLEME GAE'nin Memcache'ı memcached aslında uyumludur. İşte GAE referans var:

https://developers.google.com/appengine/docs/python/memcache/clientclass#Client_cas

ve son not:

https://developers.google.com/appengine/docs/python/memcache/clientclass#Memcached_compatibility

+0

bu bağımsız memcached ilgili değil mi, memcache Gae olmasın? –

+0

@KallePokki Cevabı güncelledim. – freakish

0

Bunu atomik yapmak için bir işlem içinde güncelleme yapmalıdır.

https://developers.google.com/appengine/docs/python/ndb/transactions

+0

Sadece bir hareket içinde yazıyor koyarak onu A'nın yazma üzerine yazmasını süreç B durmayacak durumu iyileştirme olmayacaktır. memcache CAS yardımcı olabilir nerede bir tutan kilit çeşit gerekir önlemek, böylece B olmaz/yazamıyor için, bu. –

+0

@TimHoffman Datastore işlemleri sizi tam olarak korur. Bakınız örn. Basit bir örnek https://developers.google.com/appengine/docs/python/datastore/transactions#Uses_for_Transactions. ndb sizin için yaptığı gibi Ayrıca, NDB kullanarak hiçbir neden memcache te açıkça önbellek kişiler, var. –

+0

Elbette, orijinal soru özellikle memcache ile ilgiliyse, karşılaştır ve gidilecek yoldur. Cevabımda, sorudan "db" kelimesini tespit ettim ve veri deposu da dahil edildi. –

İlgili konular