Você já tem a resposta para sua primeira pergunta: a intenção ADDé trabalhar apenas quando uma chave ainda não existe, enquanto SETexiste para atualizar o valor, independentemente de ela já existir. Se você conhece o SQL, é (aproximadamente) a diferença entre as INSERTconsultas ( 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 SETseria a operação mais comum, porque é mais comum que você queira apenas dizer "Eu quero que a chave footenha o valor bare 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 ADDseria 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 ADDe, 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 à SETmedida que o usuário avançasse em seu aplicativo.