Você já obteve a resposta para sua primeira pergunta: a intenção de ADD
é funcionar somente quando uma chave ainda não existe, enquanto SET
está lá para atualizar o valor, independentemente de já existe. Se você estiver familiarizado com o SQL, é (aproximadamente) como a diferença entre INSERT
consultas ( ADD
) e UPDATE
( SET
).
Em relação à sua pergunta de adenda, você usaria o que melhor se adequasse ao seu objetivo. Eu diria que SET
seria a operação mais comum, porque é mais comum que você queira apenas dizer "Eu quero que a chave foo
tenha o valor bar
, e eu não ligo se isso é ou não já estava lá ". No entanto, haveria ocasiões (menos frequentes) em que seria necessário saber que uma chave ainda não está no cache.
Um exemplo que vem à mente quando ADD
seria apropriado é armazenar sessões no memcache (o que, a propósito, eu não recomendo) - se você está gerando seus IDs de sessão aleatoriamente (ou via hash) , você não desejaria criar uma nova sessão com a mesma chave de uma existente, pois isso concederia a um usuário acesso aos dados de outro usuário. Nesse caso, quando você criasse a sessão, usaria ADD
e, se retornasse um status de falha, seria necessário gerar um novo ID de sessão e tentar novamente. A atualização da sessão, é claro, usaria SET
à medida que o usuário trabalhasse em seu aplicativo.