# Memcached

O componente **Memcached** permite que você realize operações em servidores Memcached.

Memcached é um sistema de código aberto para armazenamento em cache de memória distribuída, que usa um modelo chave-valor na memória para armazenamento de dados. Para mais informações, [veja o site oficial](https://memcached.org/).

## Parâmetros

Dê uma olhada nos parâmetros de configuração do componente. Parâmetros suportados por [expressões *Double Braces*](/documentation/connectors-and-triggers/pt-br/double-braces/overview.md) estão marcados com `(DB)`.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Account</strong></td><td>Conta a ser usada para autenticação nos servidores. Contas suportadas: <em>Basic</em>.</td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Operation</strong></td><td><p>Operação a ser executada. </p><p><br></p><p>As operações são: <em>Get One, Get Many, Add, Set, Delete, Replace, Append, Prepend, Touch, Get And Touch</em> e <em>CAS</em> (<em>Check And Set</em>).</p></td><td><em>Get One</em></td><td><em>String</em></td></tr><tr><td><strong>Addresses</strong> <code>(DB)</code></td><td><em>Host</em> e <em>port</em> (HOST:PORT) dos servidores aos quais se conectar. Endereços múltiplos podem ser configurados como HOST1:PORT1, HOSTn:PORTn.</td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Key</strong> <code>(DB)</code></td><td>Chave a ser armazenada ou recuperada.</td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Key Set</strong> <code>(DB)</code></td><td>Conjunto de chaves a serem recuperadas. Essa opção fica disponível somente quando a operação <em>Get Many</em> é usada e espera uma matriz de <em>strings</em> contendo as chaves.</td><td>N/A</td><td>Matriz de <em>strings</em></td></tr><tr><td><strong>Expiration</strong></td><td>Tempo (em segundos) que o dado deve ser mantido na base de dados antes de expirar. Se configurado com 0, o dado não vai expirar.</td><td>N/A</td><td>Inteiro</td></tr><tr><td><strong>Value</strong> <code>(DB)</code></td><td>Valor a ser armazenado.</td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Connect Timeout</strong></td><td>Tempo máximo (em milissegundos) para conectar aos servidores Memcached.</td><td>30000</td><td>Inteiro</td></tr><tr><td><strong>Operation Timeout</strong></td><td>Tempo máximo (em milissegundos) para executar a operação Memcached.</td><td>30000</td><td>Inteiro</td></tr><tr><td><strong>Advanced Settings</strong></td><td>Se a opção estiver ativada, você pode acessar as seguintes configurações:</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Raw Mode</strong></td><td>Quando ativada, irá considerar <strong>Value</strong> como dados brutos (não JSON) e irá armazená-los como estão. O conteúdo recuperado também será mostrado como uma <em>string</em> com um resultado bruto.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Is Binary Result</strong></td><td>Se ativada, irá tratar o resultado como um conteúdo binário e irá mostrar a saída como uma <em>string</em> <em>Base64</em>.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Pool Size By Actual Consumers</strong></td><td>Se ativada, o número de <em>pooled connections</em> será equivalente ao número de <em>consumers</em> configurados durante a implantação do <em>pipeline</em>. Se desativada, então o tamanho do <em>pool</em> é dado pelo tamanho da implantação do <em>pipeline</em>, independente do número de <em>consumers</em>.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Fail On Error</strong></td><td>Se a opção estiver ativada, a execução do <em>pipeline</em> com erro será interrompida. Do contrário, a execução do <em>pipeline</em> continua, mas o resultado irá mostrar um valor falso para a propriedade “success”.</td><td><em>False</em></td><td>Booleano</td></tr></tbody></table>

{% hint style="info" %}
**Importante:** ao usar vários servidores, a mesma credencial *Basic* deve ser usada em todos os servidores.
{% endhint %}

## **Exemplos de uso**

## **Operações de recuperação**

### **Get One**

Recupera apenas 1 registro do servidor através da sua chave.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Get One
* **Key:** id\_A

**Saída:**

```
{
    "total": 1,
    "data": [
        {
        	"key": "id_A",
        	"value": <value>
        }
    ]
}

```

### **Get Many**

Recupera qualquer número de registros do servidor através de um conjunto de chaves.

* **Account:** \<basic-account>
* **Address:** localhost:11211
* **Operation:** Get Many
* **Key Set:**

```
[
	"id_A",
	"id_B",
	"id_C",
	"id_D"
]

```

**Saída:**

```
{
    "total": 4,
    "data": [
        {
        	"key": "id_A",
        	"value": <value>
        },
        {
        	"key": "id_B",
        	"value": <value>
        },
        {
        	"key": "id_C",
        	"value": <value>
        },
        {
        	"key": "id_D",
        	"value": <value>
        }
    ]
}

```

{% hint style="info" %}
**Importante:** ao recuperar dados de um servidor Memcached, o componente pode manipular somente objetos serializáveis Java e sempre irá tentar gerá-los em formato JSON ou na sua representação de *string*. Caso o valor recuperado não possa ser analisado nesses formatos, uma exceção (*Exception*) pode ser lançada.
{% endhint %}

## **Operações de armazenamento**

### **Add**

Armazena um registro no servidor pela sua chave, tempo de expiração e valor, somente se ele ainda não existir.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Add
* **Key:** id\_A
* **Expiration:** 3600
* **Value:**

```
{
    "code": "A",
    "name": "John",
    "address": {
    	"street": "John's Street"
    },
    "number": [
    	"+5511999999999"
    ]
}

```

**Saída:**

```
{
    "success": true,   //false, se a chave já existir
    "command": "add"
}

```

### **Set**

Armazena um registro no servidor pela sua chave, expiração e valor, substituindo-o caso já exista.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Set
* **Key:** id\_A
* **Expiration:** 3600
* **Value:**

```
{
    "code": "A",
    "name": "John",
    "address": {
    	"street": "John's Street"
    },
    "number": [
    	"+5511999999999"
    ]
}

```

**Saída:**

```
{
    "success": true,
    "command": "set"
}

```

### **Replace**

Substitui o valor de um registro por sua chave, tempo de expiração e o novo valor, somente se o registro já existir.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Replace
* **Key:** id\_A
* **Expiration:** 3600
* **Value:**

```
{
    "code": "A",
    "name": "John",
    "address": {
    	"street": "John's Street"
    },
    "number": [
    	"+5511999999999"
    ]
}

```

**Saída:**

```
{
    "success": true,   //false, se a chave não existir
    "command": "replace"
}

```

### **Append**

Acrescenta um novo valor ao final do valor existente de um registro através da sua chave e valor a ser acrescentado, somente se o registro já existir. Requer a ativação do parâmetro **Raw Mode**.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Append
* **Key:** id\_A
* **Expiration:** 3600
* **Raw Mode:** enabled
* **Value:**

```
" - valor a ser acrescentado pelo append"
```

**Saída:**

```
{
    "success": true,   //false, se a chave não existir
    "command": "append"
}

```

{% hint style="info" %}
**Importante:** uma vez que a operação *Append* acrescenta novos dados aos existentes sem recuperá-los, não é possível simplesmente fazer o *append* de estruturas de dados complexos, como objetos JSON. Portanto, os dados existentes também devem ter sido armazenados como dados brutos, e o parâmetro **Raw Mode** deve ser ativado para essa operação.
{% endhint %}

### **Prepend**

Acrescenta um novo valor ao início do valor existente de um registro através da sua chave e valor a ser acrescentado, somente se o registro já existir. Requer a ativação do parâmetro **Raw Mode**.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Prepend
* **Key:** id\_A
* **Expiration:** 3600
* **Raw Mode:** enabled
* **Value:**

```
"valor a ser acrescentado pelo prepend - "
```

**Saída:**

```
{
    "success": true,   //false, se a chave não existir
    "command": "prepend"
}
```

{% hint style="info" %}
**Importante**: uma vez que a operação *Prepend* acrescenta novos dados aos existentes sem recuperá-los, não é possível simplesmente fazer o *prepend* de estruturas de dados complexos, como objetos JSON. Portanto, os dados existentes também devem ter sido armazenados como dados brutos, e o parâmetro **Raw Mode** deve ser ativado para essa operação.
{% endhint %}

### **CAS (Check And Set)**

Atualiza o valor de um registro pelo sua chave, tempo de expiração e novo valor, somente se o registro já existir e se não tiver sido modificado durante a recuperação do registro. Essa operação é útil em ambientes com condiçoes de corrida (*race conditions*) na atualização dos dados de cache.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** CAS (Check And Set)
* **Key:** id\_A
* **Expiration:** 3600
* **Value:**

```
{
    "code": "A",
    "name": "John",
    "address": {
    	"street": "John's Street"
    },
    "number": [
    	"+5511999999999"
    ]
}

```

**Saída:**

```
{
    "success": true,   //false, se a chave não existir
    "command": "cas"
}

```

## **Operações de remoção**

### **Delete**

Remove um registro do servidor através da sua chave.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Delete
* **Key:** id\_A

**Saída:**

```
{
    "success": true,    //false, se a chave não existir
    "command": "delete"
}

```

## **Operações de toque**

### **Touch**

\
Atualiza a expiração de um registro através da sua chave e um novo valor de expiração.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Touch
* **Key:** id\_A
* **Expiration:** 3600

**Saída:**

```
{
    "success": true,    //false, se a chave não existir
    "command": "touch"
}

```

### **Get And Touch**

Recupera apenas 1 registro do servidor através da sua chave enquanto atualiza seu valor de expiração.

* **Account:** \<basic-account>
* **Addresses:** localhost:11211
* **Operation:** Get And Touch
* **Key:** id\_A
* **Expiration:** 3600

**Saída:**

```
{
    "total": 1,
    "data": [
        {
        	"key": "id_A",
        	"value": <value>
        }
    ]
}

```

{% hint style="info" %}
**Importante:** ao recuperar dados de um servidor Memcached, o componente pode manipular somente objetos serializáveis Java e sempre irá tentar gerá-los em formato JSON ou na sua representação de *string*. Caso o valor recuperado não possa ser analisado nesses formatos, uma exceção (*Exception*) pode ser lançada.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/connectors/structured-data/memcached.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
