Prawie już masz odpowiedź na swoje pierwsze pytanie: celem ADD
jest działanie tylko wtedy, gdy klucz jeszcze nie istnieje, podczas gdy SET
istnieje możliwość aktualizacji wartości, niezależnie od tego, czy już istnieje. Jeśli znasz SQL, to (z grubsza) przypomina różnicę między INSERT
zapytaniami ( 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 SET
byłaby to bardziej powszechna operacja, ponieważ jest bardziej powszechne, że po prostu chcesz powiedzieć: „Chcę, aby klucz foo
miał 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 ADD
był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, SET
gdy użytkownik przeglądał Twoją aplikację.