Add vs Set no Memcached

16

Eu não entendo a diferença entre ADD e SET Alguma pista? Parece que o ADD inclui SET ou que ADD retorna false se algo estiver lá e SET apenas sobrescreve. Obrigado!

EDIT: Minha pergunta específica é: "Quando você usa adicionar em vez de definir ou definir em vez de adicionar?"

    
por user851171 19.07.2011 / 05:27

2 respostas

20

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.

    
por 19.07.2011 / 05:53
3

Além da resposta acima por user-id 'womble', considere também os seguintes pontos:

  1. Possibilidade de uma condição de corrida com 'set' em vez de 'add'. Veja abaixo o link para uma resposta de Nick Johnson: link

  2. Se você sabe que 'add' vai fazer, então não use 'set'. Isso é para evitar o envio de dados pela rede, pois são chamadas RPC . E praticamente quase todo o tempo é consumido pelo tráfego de rede, em vez de procurar pelo par de valores-chave no memcache. Então, se você puder evitar o tráfego de rede melhor, nesse caso, seu tempo de resposta será mais rápido.

Veja Appstats ( link (pelo Google)) e para entender o ponto # 2 acima, mais , por favor, assista link por Guido Van Rossum (@Google)

    
por 15.02.2014 / 19:04

Tags