Á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)

Parâmetros

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

Comando a ser enfileirado

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

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 ao método ::GetReply()

O método ::Execute() é muito semelhante em propósito ao método ::Append(): ambos disparam a execução de comandos no servidor Redis.

A maior diferença é que o programa que dispare ::Append() poderá não aguardar seu término. E só receberá o resultado do comando quando executar o método ::GetReply()

Isto 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.

Exemplos

Exemplo 1 – Comando set com String de comando constante
Toggle Cloak
exclusivetrue

Cloak
cpp

Nesta listagem, as chamadas a VarInfo() permitem conhecer o estado das propriedades do objeto oRedisClientdepois da chamada aos métodos,  e o resultado da chamada a 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 – 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: 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 veem se 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 para lidarem possam lidar com múltiplos campos são , eles devem ser prefixados por 'm' e transformados em 'mset' e 'mget'.

O comando mset do Redis trabalha analogamente de modo similar ao comando set, mas o comando mget retorna seu resultado como um vetor.