Tambah vs Set di Memcached

17

Saya tidak mengerti perbedaan antara ADD dan SET. Ada petunjuk? Sepertinya ADD termasuk SET atau ADD mengembalikan false jika ada sesuatu dan SET hanya menimpa. Terima kasih!

EDIT: Pertanyaan spesifik saya adalah, "Kapan Anda menggunakan add daripada set atau set daripada menambahkan?"

pengguna851171
sumber

Jawaban:

22

Anda sudah cukup banyak mendapatkan jawaban atas pertanyaan pertama Anda: maksudnya ADDadalah untuk hanya bekerja ketika kunci belum ada, sementara SETada untuk memperbarui nilai, terlepas dari apakah sudah ada. Jika Anda terbiasa dengan SQL, itu (kira-kira) seperti perbedaan antara INSERTkueri ( ADD) dan UPDATE( SET).

Sehubungan dengan pertanyaan tambahan Anda, Anda akan menggunakan mana yang sesuai dengan tujuan Anda. Saya akan mengatakan itu SETakan menjadi operasi yang lebih umum, karena itu lebih umum bahwa Anda hanya ingin mengatakan "Saya ingin kunci foomemiliki nilai bar, dan saya tidak peduli apakah sudah ada di sana atau belum". Namun, akan ada (lebih jarang) kesempatan ketika perlu mengetahui bahwa kunci belum ada dalam cache.

Contoh yang muncul dalam pikiran kapan yang ADDtepat adalah menyimpan sesi dalam memcache (yang, saya tidak sarankan) - jika Anda membuat ID sesi Anda secara acak (atau melalui hashing), Anda tidak akan mau untuk membuat sesi baru dengan kunci yang sama dengan yang sudah ada, karena ini akan memberikan satu pengguna akses ke data pengguna lain. Dalam hal ini, ketika Anda membuat sesi yang akan Anda gunakan ADD, dan jika itu mengembalikan status kegagalan Anda perlu membuat ID sesi baru dan coba lagi. Memperbarui sesi, tentu saja, akan digunakan SETsaat pengguna mengerjakan aplikasi Anda.

womble
sumber
1
Saya mungkin sedikit nitpicking di sini, tetapi dalam perbandingan Anda dengan SQL, jika "tambah" dibandingkan dengan INSERT, "set" akan dibandingkan dengan REPLACE daripada UPDATE.
matteo
2
Karenanya penggunaan kata "kira-kira". Jika Anda ingin menjadi benar-benar nitpicky, REPLACEbahkan bukan SQL ... itu adalah "bahasa yang terinspirasi oleh SQL yang dimengerti MySQL" (nyengir)
womble
3

Selain jawaban di atas oleh 'womble' user-id, harap pertimbangkan hal-hal berikut juga:

  1. Kemungkinan kondisi balapan dengan 'set' sebagai lawan dari 'add'. Lihat tautan di bawah ini ke jawaban oleh Nick Johnson: /programming/13234556/using-memcache-add-instead-of-set

  2. Jika Anda tahu 'tambah' akan dilakukan, maka jangan gunakan 'set'. Ini untuk menghindari pengiriman data melalui jaringan karena ini adalah panggilan RPC . Dan praktis hampir setiap waktu dikonsumsi oleh lalu lintas jaringan sebagai lawan mencari pasangan kunci-nilai dalam memcache. Jadi, jika Anda dapat menghindari lalu lintas jaringan yang terbaik seperti dalam kasus itu waktu respons Anda akan lebih cepat.


Lihat Appstats ( https://developers.google.com/appengine/docs/python/tools/appstats (oleh Google)) dan untuk memahami poin # 2 di atas lebih lanjut, silakan menonton http://www.youtube.com/watch ? v = bvp7CuBWVgA oleh Guido Van Rossum (@Google)

dev-vb
sumber