Você já tem a resposta para sua primeira pergunta: a intenção ADD
é trabalhar apenas quando uma chave ainda não existe, enquanto SET
existe para atualizar o valor, independentemente de ela já existir. Se você conhece o SQL, é (aproximadamente) a diferença entre as INSERT
consultas ( ADD
) e UPDATE
( SET
).
Em relação à sua pergunta do adendo, você usaria o que melhor se adequar ao seu objetivo. Eu diria que essa 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 não me importo se ela já existe ou não". 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ê estiver gerando seus IDs de sessão aleatoriamente (ou via hash), não deseja para criar uma nova sessão com a mesma chave que uma existente, pois isso concederia a um usuário acesso aos dados de outro usuário. Nesse caso, ao criar a sessão, você usaria ADD
e, se ela retornasse um status de falha, seria necessário gerar um novo ID da sessão e tentar novamente. A atualização da sessão, é claro, seria usada à SET
medida que o usuário avançasse em seu aplicativo.