# Caffeine Cache

O **Caffeine Cache** usa a [biblioteca Caffeine](https://github.com/ben-manes/caffeine) para armazenar dados na memória, garantindo acesso rápido. Ele ajuda a reduzir consultas ao banco de dados e acelera aplicações ao gerenciar automaticamente os dados armazenados com regras inteligentes de expiração e remoção. É ideal para armazenar respostas de APIs, resultados de consultas a bancos de dados e dados frequentemente utilizados.

{% hint style="warning" %}
Este conector usa a memória do pipeline. Se não for gerenciado corretamente, pode causar [erros de “Out of Memory”](https://app.gitbook.com/s/3ANg0NQQeslB7Og5K7Ah/common-issues/common-pipeline-issues#out-of-memory-oom).
{% endhint %}

## **Parâmetros**

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

### **Aba General**

<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>Cache Name</strong> <code>(DB)</code></td><td>Define o nome do cache.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Action</strong></td><td>Especifica a ação padrão do cache. Opções: <code>Get</code>, <code>Put</code>.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Key</strong> <code>(DB)</code></td><td>Define a chave usada para identificar os dados no cache. Usado nas ações <code>Get</code> e <code>Put</code>.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Raw Mode</strong></td><td>Quando ativado, o parâmetro <strong>Value</strong> será substituído por <strong>Body</strong>. Usado em ações <code>Put</code>.</td><td>False</td><td>Booleano</td></tr><tr><td><strong>Body</strong> <code>(DB)</code></td><td>Define os dados associados à chave especificada. Esse campo suporta múltiplos valores e é usado em ações <code>Put</code>.</td><td><code>{ }</code></td><td>JSON</td></tr><tr><td><strong>Value</strong> <code>(DB)</code></td><td>Define os dados associados à chave especificada. Permite apenas um valor e é usado em ações <code>Put</code> quando <strong>Raw Mode</strong> está desativado.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Eviction Type</strong></td><td>Determina como o cache remove entradas. Opções: <code>size_based</code>, <code>time_based</code>.</td><td><code>size_based</code></td><td>String</td></tr><tr><td><strong>Initial Capacity (quando <code>size_based</code> é selecionado)</strong></td><td>Define o tamanho inicial das estruturas de dados internas. Isso não limita o tamanho máximo do cache, mas ajuda a otimizar o desempenho. Se não especificado, a capacidade inicial padrão é <code>16</code>. Quando fornecido, o valor especificado substituirá o padrão.</td><td><code>0</code></td><td>Inteiro</td></tr><tr><td><strong>Maximum Size (quando <code>size_based</code> é selecionado)</strong></td><td>Define o número máximo de entradas que o cache pode armazenar, medido em quantidade e não em bytes. O cache pode começar a remover entradas antes de atingir esse limite ou ultrapassá-lo brevemente durante a remoção. Definir este valor como <code>0</code> desativa o cache, removendo as entradas imediatamente após serem carregadas.</td><td><code>0</code></td><td>Inteiro</td></tr><tr><td><strong>Expire After Access Time (s) (quando <code>time_based</code> é selecionado)</strong></td><td>Define o tempo de expiração após os dados serem acessados, em segundos.</td><td><code>300</code></td><td>Inteiro</td></tr><tr><td><strong>Expire After Write Time (s) (quando <code>time_based</code> é selecionado)</strong></td><td>Define o tempo de expiração após os dados serem gravados, em segundos.</td><td><code>300</code></td><td>Inteiro</td></tr><tr><td><strong>Fail On Error</strong></td><td>Se a opção for ativada, a execução do pipeline com erro será interrompida. Caso contrário, a execução do pipeline continua, mas o resultado mostrará um valor falso para a propriedade <code>"success"</code>.</td><td>False</td><td>Booleano</td></tr></tbody></table>

### **Aba Optional**

<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>Create Cache If Not Exist</strong></td><td>Cria automaticamente um novo Caffeine cache se nenhum for configurado ou encontrado no registro. Quando desativado, tentar acessar um cache inexistente resultará em um erro.</td><td>True</td><td>Booleano</td></tr><tr><td><strong>Do not display the result</strong></td><td>Quando ativado, não indica se a ação teve um resultado. Isso é mais útil para operações de <code>Get</code>.</td><td>True</td><td>Booleano</td></tr><tr><td><strong>Not showing success</strong></td><td>Quando ativado, não indica se a ação foi bem-sucedida. Isso é mais útil para operações de <code>Put</code>.</td><td>True</td><td>Booleano</td></tr></tbody></table>

### **Aba Documentation**

<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>Documentation</strong></td><td>Seção para documentar qualquer informação necessária sobre a configuração do conector e regras de negócio.</td><td>N/A</td><td>String</td></tr></tbody></table>

## **Exemplo de uso**

Neste exemplo, usamos dois conectores Caffeine Cache no fluxo: um no início com a ação `Put` e outro no final do fluxo com a ação `Get`.

O primeiro Caffeine Cache armazena dados no cache para uso posterior. Aqui está a configuração:

* **Cache Name:** `digibee`
* **Action:** `Put`
* **Key:** `token`
* **Raw Mode:** `Disabled`
* **Value:** `digibee_cache`
* **Eviction Type:** `size_based`
* **Initial Capacity:** `10`
* **Maximum Size:** `999`

Ao executar apenas este conector, a saída abaixo confirma que os dados foram armazenados com sucesso no cache:

```json
{
  "success": true
}
```

No final do fluxo, recuperamos os dados armazenados usando outro conector Caffeine Cache, agora configurado da seguinte forma:

* **Cache Name:** `digibee`
* **Action:** `Get`
* **Key:** `token`

Ao executar o fluxo completo, recebemos a seguinte saída, confirmando a recuperação dos dados armazenados no cache:

```json
{
  "success": true,
  "body": {
    "result": "digibee_cache"
  }
}
```
