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