Árvore de páginas

Versões comparadas

Chave

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

Dispara a execução de um comando a ser processado pelo servidor Redis.

Sintaxe

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

Parâmetros

NomeTipoDescriçãoObrigatórioReferênciaObservações
cCommandCaracterComando Redis a ser executadoX

cParam1
CaracterComplemento do comando

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

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

Quantidade indefinida de parâmetros complementares adicionais
cParamN
Caracter

Complemento do comando



Substituirá a n-ésima interrogação (ou ?) que houver no comando cCommand.
retValVariávelReceberá o resultado da execuçãoXXIrá conter o resultado do comando executado no Redis conforme o tipo de operação, podendo ser status (lógico), numérico, texto (caracter), array, nulo.

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 ::Exec()
   Por exemplo,
    oRedisClient:Exec(cCommand, @outParm):lOk


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

Observações

  • O número de parâmetros complementares é ao comando é praticamente ilimitado, suficiente para a imensa maioria das aplicações que usem Redis;

  • Alguns comandos do Redis 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 caractere ?
  • 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 é que o programa que dispare ::
Execute
  • Exec()
aguardará
  • terá que aguardar seu término e receberá dele o resultado do comando, ao passo que
um programa que dispare
  • isso não ocorre com ::Append
() terá que chamar ::GetReply
  • ()
para obter o resultado da execução do comando.
Isto torna ::Append() ideal para a programação assíncrona e concorrente, ao passo que
  • . Por isso ::Exec() fica limitado à programação sequencial e síncrona.

Um ponto importante é que
  • Pontos importantes a serem observados:
        • o resultado da função é passado para o parâmetro retVal, que deve por isso ser passado por referência.
      Execute
        • ::Exec() também altera o estado do objeto sobre o qual é chamado. Por isso, também as propriedades do objeto terão que ser avaliadas
      .
        • depois da chamada ao método ::Exec();
      • o tipo de dados do resultado da chamada a ::Exec() vai variar de acordo com o comando executado. Por exemplo, o comando set retorna valor lógico (.T. ou .F.), enquanto que get retorna uma cadeia de caracteres.
      • O comando 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 nas propriedades tRedisClient:nError e tRedisClient:cError.

    Exemplos

    Exemplo 1 - Emissão do comandoset para o servidor  Redis
    Toggle Cloak
    exclusivetrue

    Cloak
    cpptrue

    Exemplo 2 - Emissão do comando set para o servidor  Redis, parametrizado
    Toggle Cloak
    exclusivetrue

    Cloak
    cpptrue

    Exemplo 3 - Emissão do comando get para o servidor  Redis 
    Toggle Cloak
    exclusivetrue

    Cloak
    cpptrue

    Veja também

    Exemplos

    Bloco de código
    linenumberstrue
    #include 'protheus.ch'
     
    User Function redisTst()
      Local retVal := Nil
    
      oRedisCli:= tRedisClient():New()
    
      // Setup Redis connection
      oRedisCli:Connect("tec-clima", 6379, "")
    
      If oRedisClient:lConnected
        // Set the field 'x' to the value 'aaa'
    	oRedisCli:Exec("set x aaa", @retVal)
    
        ConOut("Result of Exec(): " + retVal)
        VarInfo("State of the object: ", oRdClient)
    
        oRdClient:Disconnect()
        Return .T.
      EndIf 
    
    Return .F.

    Veja também