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

Sintaxe

oRedisAfter := oRedisClient:Append(cCommand [ , cParameter ])

Parâmetros

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

Comando a ser enfileirado

X
Pode conter ? que será preenchida por parâmetro
cParameter
CaracterComplemento do comando

Substituirá a interrogação (ou ?) eventual no comando.

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

Alguns comandos admitem parâmetros adicionais. Neste caso, para facilidade de programação, pode-se ter uma string de comando fixa (ou constante), com possibilidade de substituição por variáveis nos pontos onde for inserido um ponto de interrogação, o caracter ?

::Append() apenas enfileira comandos para processamento pelo servidor Redis. A resposta a eles deve ser obtida por chamadas de ::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 – String de comando constante

#include 'protheus.ch'
  
User Function ApndTstC()
  Local retVal       := Nil 
  Local outParm      := Nil 
  Local oRedisClient := Nil 
  
  // Alocation of an object tRedisClient 
  oRedisClient:= tRedisClient():New()
 
  // Connection to of client to a server
  oRedisClient:Connect("localhost", 6379, "")
 
  If oRedisClient:lConnected
    // Set the field 'x' to the value 'aaa' and gets reply
    retVal := oRedisClient:Append('set x "aaa"')
    VarInfo("Result of ::Append()", retVal)
    
    retVal := oRedisClient:GetReply(@outParm)
 
    VarInfo("Output of ::GetReply()", outParm)
    VarInfo("Result of ::GetReply()", retVal)
 
    oRedisClient:Disconnect()
    Return .T.
  EndIf
 
Return .F.

Nesta listagem, as chamadas a VarInfo() permitem conhecer o estado das propriedades do objeto oRedisClient depois 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 há uma resposta do servidor Redis a ser recebida 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.

Exemplo 2 – String de comando parametrizada

#include 'protheus.ch'
 
User Function ApndTstV()
  oRedisCli:= tRedisClient():New()

  // Setup Redis connection
  oRedisCli:Connect("localhost", 6379, "")

  If oRedisClient:lConnected
    // Set the field 'x' to the value 'aaa'
    oRedisCli:Append("set x ?", "aaa")

	retVal := oRedisCli:GetReply()

    ConOut(retVal)

    oRdClient:Disconnect()
    Return .T.
  EndIf 

Return .F.