Додати проти встановити в Memcached


17

Я не розумію різницю між ADD та SET Будь-які підказки? Схоже, що ADD включає SET або ADD повертає помилкове значення, якщо щось є, а SET просто перезаписується. Спасибі!

EDIT: Моє конкретне питання: "Коли ви використовуєте додавання, а не встановлення чи встановлення, а не додавання?"

Відповіді:


22

Ви вже майже отримали відповідь на своє перше запитання: намір ADDпрацюватиме лише тоді, коли ключ ще не існує, в той час як SETє оновлення значення, незалежно від того, чи воно вже існує. Якщо ви знайомі з SQL, це (приблизно) схоже на різницю між INSERTзапитами ( ADD) і UPDATE( SET).

Що стосується Вашого додаткового питання, Ви б використовували те, що відповідає Вашій меті. Я б сказав, що це SETбуло б більш звичайною операцією, тому що більш часто зустрічається, що ви просто хочете сказати "Я хочу, щоб ключ fooмав значення bar, і мені байдуже, чи він там уже був". Однак трапляться (рідше) випадки, коли потрібно знати, що ключ ще не знаходиться в кеші.

Приклад, який спадає на думку, коли ADDбуло б доречно, - це зберігання сеансів у пам’яті (що, до речі, я не рекомендую) - якщо ви генеруєте ідентифікатори сеансів випадковим чином (або за допомогою хешування), ви б не хотіли створити новий сеанс тим самим ключем, що і існуючий, оскільки це дозволить одному користувачеві отримати доступ до даних іншого користувача. У цьому випадку, коли ви створили сеанс, який ви б використовували ADD, і якщо він повернув статус відмови, вам потрібно буде створити новий ідентифікатор сеансу та спробувати ще раз. Оновлення сеансу, звичайно, потім використовуватиметься, SETколи користувач пропрацював ваш додаток.


1
Я, можливо, тут трохи не полюбляю, але у вашому порівнянні з SQL, якщо "додати" порівнювати з INSERT, "встановити" буде порівняно із ЗАМІНЮ, а не ОНОВЛЕННЯ.
Маттео

2
Звідси вживання слова «грубо». Якщо ви хочете отримати справді нерозумний, REPLACEнавіть не SQL ... це "мова, натхненна SQL, яку розуміє MySQL" (усмішка)
жінкою

3

Окрім відповіді, вказаної вище у користувальницькому ідентифікаторі 'wbleble', будь ласка, врахуйте також такі моменти:

  1. Можливість умови перегонів з 'set' на відміну від 'add'. Дивіться нижче посилання на відповідь Ніка Джонсона: /programming/13234556/using-memcache-add-instead-of-set

  2. Якщо ви знаєте, що "додати" буде робити, не використовуйте "встановити". Це уникає надсилання даних по мережі, оскільки це дзвінки RPC . І практично майже весь час споживається мережевий трафік, на відміну від пошуку пари ключових значень у мемошах. Тож якщо ви зможете уникнути найкращого мережевого трафіку, так як у такому випадку ваш час відповіді буде швидшим.


Див. Додатки ( https://developers.google.com/appengine/docs/python/tools/appstats (від Google)) та щоб зрозуміти пункт №2 вище, перегляньте http://www.youtube.com/watch ? v = bvp7CuBWVgA від Гвідо Ван Россума (@Google)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.