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.
REPLACE
nem é SQL ... é "a linguagem pouco inspirada em SQL que o MySQL entende" (sorrir)Além da resposta acima pela identificação do usuário 'womble', considere também os seguintes pontos:
Possibilidade de uma condição de corrida com 'set' em oposição a 'add'. Veja abaixo o link para uma resposta de Nick Johnson: /programming/13234556/using-memcache-add-instead-of-set
Se você sabe que 'add' serve, não use 'set'. Isso evita o envio de dados pela rede, pois são chamadas RPC . E praticamente todo o tempo é consumido pelo tráfego da rede, em vez de procurar o par de valores-chave no memcache. Portanto, se você puder evitar o melhor tráfego de rede, nesse caso, o tempo de resposta será mais rápido.
Consulte Appstats ( https://developers.google.com/appengine/docs/python/tools/appstats (do Google)) e para entender o ponto 2 acima, mais, assista a http://www.youtube.com/watch ? v = bvp7CuBWVgA de Guido Van Rossum (@Google)
fonte