Prawie już masz odpowiedź na swoje pierwsze pytanie: celem ADDjest działanie tylko wtedy, gdy klucz jeszcze nie istnieje, podczas gdy SETistnieje możliwość aktualizacji wartości, niezależnie od tego, czy już istnieje. Jeśli znasz SQL, to (z grubsza) przypomina różnicę między INSERTzapytaniami ( ADD) i UPDATE( SET).
Jeśli chodzi o twoje pytanie uzupełniające, użyłbyś tego, które odpowiada Twojemu celowi. Powiedziałbym, że SETbyłaby to bardziej powszechna operacja, ponieważ jest bardziej powszechne, że po prostu chcesz powiedzieć: „Chcę, aby klucz foomiał wartość bar, i nie obchodzi mnie, czy już tam był”. Zdarzałyby się jednak (rzadziej) sytuacje, w których trzeba byłoby wiedzieć, że klucza nie ma już w pamięci podręcznej.
Przykładem, który przychodzi mi na myśl, kiedy ADDbyłoby właściwe, jest przechowywanie sesji w memcache (które, nawiasem mówiąc, nie polecam) - jeśli generujesz identyfikatory sesji losowo (lub za pomocą skrótu), nie chcesz aby utworzyć nową sesję z takim samym kluczem jak istniejący, ponieważ zapewni to jednemu użytkownikowi dostęp do danych innego użytkownika. W takim przypadku, gdy utworzysz sesję, której będziesz używał ADD, a jeśli zwróci stan awarii, musisz wygenerować nowy identyfikator sesji i spróbować ponownie. Oczywiście zaktualizowanie sesji przydałoby się wtedy, SETgdy użytkownik przeglądał Twoją aplikację.