CAS (Compare And Set) e CAD (Compare And Delete) são comandos condicionais atômicos para strings Redis nativas em instâncias Tair. O CAS atualiza o valor de uma chave somente quando ele corresponde ao valor esperado; o CAD exclui uma chave somente quando seu valor coincide.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância Tair baseada em DRAM ou otimizada para memória persistente na versão secundária 1.2.3 ou posterior
(Recomendado) Instância atualizada para a versão secundária mais recente, para obter recursos adicionais e maior estabilidade — consulte Atualizar a versão secundária de uma instância
(Para instâncias em cluster ou com separação de leitura/gravação) Nós de proxy atualizados para a versão secundária mais recente, para que todos os comandos sejam executados corretamente
Visão geral dos comandos
|
Comando |
Sintaxe |
Descrição |
|||
|
CAS |
|
PX |
EXAT |
PXAT time]` |
Compara o valor atual da chave com |
|
CAD |
|
Compara o valor atual da chave com |
Convenções de sintaxe
|
Notação |
Significado |
|
|
|
Palavra-chave do comando |
|
|
|
Variável — substitua por um valor real |
|
|
|
Parâmetro opcional; parâmetros sem colchetes são obrigatórios |
|
|
|
B` |
Mutuamente exclusivo — especifique apenas um |
|
|
O parâmetro pode ser repetido |
CAS
Compara atomicamente o valor atual de uma chave com oldvalue e, se coincidirem, substitui pelo valor newvalue.
Sintaxe: CAS key oldvalue newvalue [EX|PX|EXAT|PXAT time]
Complexidade de tempo O(1)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Chave de destino do tipo string |
|
|
Valor atual esperado da chave |
|
|
Valor a definir caso |
|
|
Expiração relativa em segundos. |
|
|
Expiração relativa em milissegundos. |
|
|
Expiração absoluta como timestamp Unix em segundos. |
|
|
Expiração absoluta como timestamp Unix em milissegundos. |
Se a chave tiver um Time to Live (TTL) e você execute CAS sem um parâmetro de expiração, o TTL será removido e a chave não expirará.
Valor de retorno
|
Valor |
Significado |
|
|
Valores coincidiram; chave atualizada |
|
|
Valores não coincidiram; chave inalterada |
|
|
Chave não existe |
|
Error |
Outra falha |
Exemplos
A sessão a seguir demonstra os três resultados possíveis do CAS: valor divergente, valor coincidente e expiração.
127.0.0.1:6379> SET foo bar
OK
127.0.0.1:6379> CAS foo baa bzz
(integer) 0
127.0.0.1:6379> GET foo
"bar"
127.0.0.1:6379> CAS foo bar bzz
(integer) 1
127.0.0.1:6379> GET foo
"bzz"
127.0.0.1:6379> CAS foo bzz too EX 10
(integer) 1
127.0.0.1:6379> GET foo
"too"
Após o TTL de 10 segundos expirar, a chave deixa de existir:
127.0.0.1:6379> GET foo
(nil)
CAD
Compara atomicamente o valor atual de uma chave com value e, se coincidirem, exclua a chave.
Sintaxe: CAD key value
Complexidade de tempo O(1)
Parâmetros
|
Parâmetro |
Descrição |
|
|
Chave de destino do tipo string |
|
|
Valor atual esperado da chave |
Valor de retorno
|
Valor |
Significado |
|
|
Valores coincidiram; chave excluída |
|
|
Valores não coincidiram; chave inalterada |
|
|
Chave não existe |
|
Error |
Outra falha |
Exemplos
A sessão a seguir demonstra os três resultados possíveis do CAD: valor divergente, chave inexistente e exclusão bem-sucedida.
127.0.0.1:6379> SET foo bar
OK
127.0.0.1:6379> CAD foo bzz
(integer) 0
127.0.0.1:6379> CAD not-exists xxx
(integer) -1
127.0.0.1:6379> CAD foo bar
(integer) 1
127.0.0.1:6379> GET foo
(nil)