Soru Memcached olarak Set ekle


ADD ve SET arasındaki farkları anlamıyorum Herhangi bir ipucu? ADD'nin SET içermesi ya da bir şey varsa ve SET'in üzerine yazması durumunda ADD'nin false döndürdüğü görülüyor. Teşekkürler!

DÜZENLEME: Benim özel sorum: "Ne eklemek yerine eklemek veya eklemek yerine eklemek?"


15
2017-07-19 03:27


Menşei




Cevaplar:


Şimdiden ilk sorunun cevabını aldınız: ADD sadece bir anahtar mevcut değilken çalışmak için SET zaten var olup olmadığına bakılmaksızın değeri güncellemek için var. SQL ile aşina iseniz, (kabaca) arasındaki fark gibi INSERT sorguları (ADD) ve UPDATE (SET).

Ek soruyla ilgili olarak, hangisi sizin amacınıza uygunsa onu kullanırsınız. şunu söylemek isterim SET daha yaygın işlem olurdu, çünkü sadece "Ben anahtarı istiyorum foo değere sahip olmak barve zaten orada olup olmadığına aldırmam. "Ancak, anahtarın önbellekte bulunmadığını bilmek gerekli olduğunda (daha az sıklıkta) durumlar olacaktır.

Ne zaman akla gelen bir örnek ADD uygun olurdu memcache oturumları saklamak (ki, bu arada, ben tavsiye etmem) - Eğer oturum kimliklerini rastgele (veya karma yoluyla) oluşturuyorsanız, yeni bir oturum oluşturmak istemezsiniz. Bir kullanıcının başka bir kullanıcının verilerine erişmesini sağlayacağından, mevcut olanla aynı anahtar. Bu durumda, oturumu oluşturduğunuzda ADDve bir hata durumu döndürdüyse, yeni bir oturum kimliği oluşturmanız ve tekrar denemeniz gerekir. Seansın güncellenmesi, elbette, SET kullanıcı uygulamanızın içinden geçerken.


19
2017-07-19 03:53



mükemmel teşekkürler! - user851171
Ben burada biraz nitpicking olabilir, ama SQL ile karşılaştırıldığında, "add" INSERT ile karşılaştırırsa, "set" UPDATE yerine REPLACE ile karşılaştırır. - matteo
Bu yüzden "kabaca" kelimesinin kullanılması. Eğer almak istiyorsan Gerçekten mi nitpicky, REPLACESQL bile değil ... "MySQL'in anladığı SQL'den esinlenilen dil" (sırıtış) - womble♦


Yukarıdaki kullanıcı adı 'womble' ile ek olarak, lütfen aşağıdaki noktaları da göz önünde bulundurun:

  1. Bir olasılık yarış kondisyonu 'add' ile tersine 'set' ile. Nick Johnson'un bir cevabına aşağıdaki bağlantıya bakın: https://stackoverflow.com/questions/13234556/using-memcache-add-instead-of-set

  2. Eğer 'add' komutunu biliyorsanız, 'set' kullanmayın. Bu RPC çağrıları olduğu için ağ üzerinden veri göndermekten kaçının. Ve neredeyse tüm zamanlar, memcache'de anahtar-değer çifti aramanın tersine, ağ trafiği tarafından tüketilir. Bu nedenle, en iyi olduğu gibi ağ trafiğinden kaçınmanız durumunda yanıt süreniz daha hızlı olacaktır.


Appstats'a bakın (https://developers.google.com/appengine/docs/python/tools/appstats (Google’a göre)) ve yukarıdaki 2. numaralı noktayı daha fazla anlamak için lütfen izleyin http://www.youtube.com/watch?v=bvp7CuBWVgA Guido Van Rossum (@Google) tarafından


3
2018-02-15 18:04