Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Enfileira um comando na fila de comandos para serem processados pelo servidor Redis.

Sintaxe

Bloco de código
oRedisAfter := oRedisClient:Append(cCommand [, cParam1 [, cParam2 ... [, cParamN] ])

Parâmetros

NomeTipoDescriçãoObrigatórioReferênciaObservações
cCommand
Caracter

Comando a ser enfileirado

X
Pode conter ? que será preenchida por parâmetro
cParam1Caracter

Complemento do comando



Substituirá a primeira interrogação (ou ?) que houver no comando cCommand.
cParam2CaracterComplemento do comando

Substituirá a segunda interrogação (ou ?) que houver no comando cCommand.
.........

Quantidade indefinida de parâmetros complementares
cParamN
CaracterComplemento do comando

Substituirá a n-ésima interrogação (ou ?) que houver no comando cCommand.

Retorno

NomeTipoDescriçãoObservações
oRedisAfter
objeto tRedisClientCópia do objeto sobre o qual foi feita a chamada, alterado por ela.*

Isto permite acoplar outros métodos e propriedades à chamada de ::Append()
   Por exemplo,
    oRedisCli:Append(cCommand, @retVal):lOk


   testará se o comando foi bem sucedido, sem a necessidade de uma consulta à parte a ::lOk sobre o objeto oRedisClient.

Observações

  • ::Append() apenas enfileira comandos para processamento pelo servidor Redis. A resposta a eles deve ser obtida por chamadas
de
  • ao método ::GetReply()
  • O método ::
Execute
  • Exec() é muito semelhante em propósito ao método ::Append(): ambos disparam a execução de comandos no servidor Redis.
  • A maior diferença entre ::Append() e ::Exec() é que o programa que dispare ::Append()
poderá
  • não precisará aguardar
seu
  • o término de sua execução. E só receberá o resultado do comando quando executar o método ::GetReply()
Isto
  • O fato de não ser necessário acompanhar a execução do comando torna ::Append() ideal para a programação assíncrona e concorrente do servidor Redis, ao passo que ::Exec() fica limitado à programação sequencial e síncrona.
    O método ::Append() altera o estado da propriedade tRedisClient:lOk indicando se o comando foi executado corretamente ou com erro, e neste caso o número do erro é atualizado na propriedades tRedisClient:nError. O erro é então decodificado como texto legível por humanos na propriedade tRedisClient:cError.


Exemplos

Exemplo 1 – Comando set com

String

string de comando

constante

fixa
Toggle Cloak
exclusivetrue

Cloak
cpp
  • Nesta listagem,
as chamadas a VarInfo() permitem conhecer
  • são mostrados o estado das propriedades do objeto oRedisClientdepois da chamada aos métodos
,  e o resultado da chamada a
  • ::Append() e GetReply().
  • É interessante observar que:
    • a propriedade oRedisClient:nReplyType é negativa depois da chamada do método ::Append(), indicando que este comando não teve uma resposta do servidor Redis a ser processada pelo cliente;
    • o resultado (output) da execução do comando set x 'aaa', disparado por ::Append() e recebido por ::GetReply(), é .T., indicando que foi bem sucedida a atribuição da string 'aaa' ao campo x;
    • o tipo de resposta de ::GetReply() é marcado como 5, indicando que é variável do tipo Status no contexto do Redis, ou lógica, no contexto do AdvPL.

Exemplo 2 –

String

Comando set com string de comando parametrizada
Toggle Cloak
exclusivetrue

Cloak
cpptrue

Este outro programa AdvPL é bastante similar ao anterior. Sua maior diferença é o fato de que a chamada ao comando set do AdvPL é parametrizada; ou seja:

em vez de set x aaa

neste exemplo o comando Redis 'set x "aaa"' é quebrado em duas partes: 'set x ?' e "aaa".

A utilidade deste recurso é permitir que uma parte do comando possa ser mantida fixa, e que outras partes possam ser parametrizadas. Inclusive através de variáveis de programa, que podem ter seus valores obtidos por interação com o usuário, ou através de consulta a bases de dados.

Outro ponto interessante deste programa é o uso do comando 'get x', que recupera o resultado da atribuição ao campo x neste caso confirma que o par 'set x'e "aaa" de fato colocou o valor aaa no campo x.

Exemplo 3 – Comando mset com string de comando parametrizada e múltiplos campos e valores
Toggle Cloak
exclusivetrue

Cloak
cpptrue

Nesta listagem são mostrados dois campos sendo afetados por um único comando, no qual os valores são passados como parâmetros. Um ponto importante é que para que os mesmos comandos set e get da listagem anterior possam lidar com múltiplos campos, eles devem ser prefixados por 'm' e transformados em 'mset' e 'mget'.

O comando mset do Redis trabalha de modo similar ao comando set; isto é: devolve verdadeiro (ou .T.) se todos campos foram atribuídos de modo corret, ou .F. caso contrário). Contudo, o comando mget retorna seu resultado como um vetor.