Passer au contenu principal
Ce moteur permet d’intégrer ClickHouse à Redis. 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).

Création d’une table

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.
SérialisationPRIMARY 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.
Les arguments peuvent également être transmis à l’aide de collections nommées. 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.
FiltrageLes 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.

Exemple d’utilisation

Créez une table dans ClickHouse en utilisant le moteur Redis avec des arguments simples :
Query
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 :
<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>
Query
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis(redis_creds) PRIMARY KEY(key);
Insertion :
Query
INSERT INTO redis_table VALUES('1', 1, '1', 1.0), ('2', 2, '2', 2.0);
Query
SELECT COUNT(*) FROM redis_table;
Response
┌─count()─┐
│       2 │
└─────────┘
Query
SELECT * FROM redis_table WHERE key='1';
Response
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 1   │  1 │ 1  │  1 │
└─────┴────┴────┴────┘
Query
SELECT * FROM redis_table WHERE v1=2;
Response
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 2   │  2 │ 2  │  2 │
└─────┴────┴────┴────┘
Mise à jour : Notez qu’il n’est pas possible de mettre à jour la clé primaire.
Query
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';
Supprimer :
Query
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.
Query
TRUNCATE TABLE redis_table SYNC;
Jointure : Jointure avec d’autres tables.
Query
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;

Limites

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.
  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é.
Dernière modification le 29 juin 2026