> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Ce moteur permet d’intégrer ClickHouse à Redis.

# Moteur de table Redis

Ce moteur permet d’intégrer ClickHouse à [Redis](https://redis.io/). Comme Redis repose sur un modèle clé-valeur, nous vous recommandons vivement de ne l’interroger que de façon ciblée, par exemple avec `where k=xx` ou `where k in (xx, xx)`.

<div id="creating-a-table">
  ## Création d’une table
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
    name1 [type1],
    name2 [type2],
    ...
) ENGINE = Redis({host:port[, db_index[, password[, pool_size]]] | named_collection[, option=value [,..]] })
PRIMARY KEY(primary_key_name);
```

**Paramètres du moteur**

* `host:port` — adresse du serveur Redis ; vous pouvez omettre le port, et le port Redis par défaut `6379` sera utilisé.
* `db_index` — index de la base de données Redis, compris entre 0 et 15 ; la valeur par défaut est 0.
* `password` — mot de passe de l’utilisateur ; la valeur par défaut est une chaîne vide.
* `pool_size` — taille maximale du pool de connexions Redis ; la valeur par défaut est 16.
* `primary_key_name` - n’importe quel nom de colonne dans la liste des colonnes.

<Info>
  **Sérialisation**

  `PRIMARY KEY` ne prend en charge qu’une seule colonne. La clé primaire sera sérialisée au format binaire comme clé Redis.
  Les colonnes autres que la clé primaire seront sérialisées au format binaire comme valeur Redis, dans l’ordre correspondant.
</Info>

Les arguments peuvent également être transmis à l’aide de [collections nommées](/fr/concepts/features/configuration/server-config/named-collections). Dans ce cas, `host` et `port` doivent être spécifiés séparément. Cette approche est recommandée pour l’environnement de production. À l’heure actuelle, tous les paramètres transmis à Redis via des collections nommées sont obligatoires.

<Info>
  **Filtrage**

  Les requêtes avec un filtrage `key equals` ou `in` seront optimisées en recherches de plusieurs clés dans Redis. Si les requêtes n’incluent pas de clé de filtrage, un balayage complet de la table sera effectué, ce qui constitue une opération coûteuse.
</Info>

<div id="usage-example">
  ## Exemple d'utilisation
</div>

Créez une table dans ClickHouse en utilisant le moteur `Redis` avec des arguments simples :

```sql title="Query" theme={null}
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);
```

Ou à l’aide des [collections nommées](/fr/concepts/features/configuration/server-config/named-collections) :

```xml theme={null}
<named_collections>
    <redis_creds>
        <host>localhost</host>
        <port>6379</port>
        <password>****</password>
        <pool_size>16</pool_size>
        <db_index>0</db_index>
    </redis_creds>
</named_collections>
```

```sql title="Query" theme={null}
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis(redis_creds) PRIMARY KEY(key);
```

Insertion :

```sql title="Query" theme={null}
INSERT INTO redis_table VALUES('1', 1, '1', 1.0), ('2', 2, '2', 2.0);
```

```sql title="Query" theme={null}
SELECT COUNT(*) FROM redis_table;
```

```text title="Response" theme={null}
┌─count()─┐
│       2 │
└─────────┘
```

```sql title="Query" theme={null}
SELECT * FROM redis_table WHERE key='1';
```

```text title="Response" theme={null}
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 1   │  1 │ 1  │  1 │
└─────┴────┴────┴────┘
```

```sql title="Query" theme={null}
SELECT * FROM redis_table WHERE v1=2;
```

```text title="Response" theme={null}
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 2   │  2 │ 2  │  2 │
└─────┴────┴────┴────┘
```

Mise à jour :

Notez qu’il n’est pas possible de mettre à jour la clé primaire.

```sql title="Query" theme={null}
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';
```

Supprimer :

```sql title="Query" theme={null}
ALTER TABLE redis_table DELETE WHERE key='1';
```

TRUNCATE :

Vide la base de données Redis de manière asynchrone. Le mode SYNC est également pris en charge par `Truncate`.

```sql title="Query" theme={null}
TRUNCATE TABLE redis_table SYNC;
```

Jointure :

Jointure avec d’autres tables.

```sql title="Query" theme={null}
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;
```

<div id="limitations">
  ## Limites
</div>

Le moteur Redis prend également en charge les requêtes de balayage, telles que `where k > xx`, mais il présente certaines limites :

1. Une requête de balayage peut, dans de très rares cas, produire des clés en double lors du rehashing. Voir les détails dans [Redis Scan](https://github.com/redis/redis/blob/e4d183afd33e0b2e6e8d1c79a832f678a04a7886/src/dict.c#L1186-L1269).
2. Pendant le balayage, des clés peuvent être créées et supprimées. L'ensemble de données obtenu ne peut donc pas correspondre à un instantané cohérent à un moment donné.
