Memcached'de Set / Set Ekle


17

EKLE ve AYARLA arasındaki farkı anlamıyorum Herhangi bir ipucu var mı? ADD SET'i içeriyor gibi görünüyor veya bir şey varsa ADD yanlış döndürüyor ve SET sadece üzerine yazılıyor. Teşekkürler!

EDIT: Benim özel sorum, "Ne zaman eklemek yerine set veya set yerine add kullanın?"

Yanıtlar:


22

Zaten ilk sorunuzun cevabını aldınız: amacı ADDsadece bir anahtar zaten olmadığında çalışmaktır, mevcut SETolup olmadığına bakılmaksızın değeri güncellemek için vardır. SQL hakkında bilginiz varsa, (kabaca) INSERTsorgu ( ADD) ve UPDATE( SET) arasındaki fark gibidir .

Zeyilname sorunuzla ilgili olarak amacınıza uygun olanı kullanırsınız. Bunun SETdaha yaygın bir işlem olacağını söyleyebilirim , çünkü "Anahtarın foodeğere sahip olmasını istiyorum ve barzaten orada olup olmadığını umursam" demek istemeniz daha yaygın . Bununla birlikte, bir anahtarın önbellekte bulunmadığını bilmek gerektiğinde (daha az sıklıkta) durumlar olur.

Uygun olduğunda akla gelen bir örnek, ADDoturumları memcache'de saklamaktır (bu arada, tavsiye etmiyorum) - oturum kimliklerinizi rastgele oluşturursanız (veya karma yoluyla), istemezsiniz mevcut bir anahtarla aynı anahtarla yeni bir oturum oluşturmak için, bu bir kullanıcıya başka bir kullanıcının verilerine erişim izni verecektir. Bu durumda, oturumu oluşturduğunuzda kullanırsınız ADDve başarısızlık durumu döndürdüyse yeni bir oturum kimliği oluşturmanız ve tekrar denemeniz gerekir. Oturumu güncellemek, elbette, SETkullanıcı uygulamanızda yoluna devam ederken kullanılır.


1
Burada biraz nitpicking olabilir, ancak SQL ile karşılaştırıldığında, "add" INSERT karşılaştırırsa, "set" UPDATE yerine REPLACE karşılaştırır.
matteo

2
Bu nedenle "kabaca" kelimesinin kullanımı. Gerçekten nitpicky almak istiyorsanız , REPLACESQL bile değil ... "MySQL'in anladığı
SQL'den

3

'Womble' kullanıcı kimliğinin yukarıdaki cevaba ek olarak, lütfen aşağıdaki noktaları da göz önünde bulundurun:

  1. 'Add' yerine 'set' ile yarış durumu olasılığı . Nick Johnson tarafından verilen bir cevap bağlantısı için aşağıya bakın: /programming/13234556/using-memcache-add-instead-of-set

  2. Eğer 'ekle' yapacağını biliyorsanız, 'set' kullanmayın. Bu, RPC çağrıları olduğu için ağ üzerinden veri göndermekten kaçınmak içindir . Ve neredeyse tüm zamanlar memcache'de anahtar / değer çiftini aramak yerine ağ trafiği tarafından tüketilir. Dolayısıyla, bu durumda olduğu gibi en iyi ağ trafiğinden kaçınabiliyorsanız yanıt süreniz daha hızlı olacaktır.


(Bkz Appstats https://developers.google.com/appengine/docs/python/tools/appstats () Google'dan) ve nokta anlamak için yukarıdaki daha 2. izlemek lütfen http://www.youtube.com/watch ? v = bvp7CuBWVgA Guido Van Rossum tarafından (@Google)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.