Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Moteur de table Redis

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.

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.

Exemple d'utilisation

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

Querysql
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>
Querysql
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis(redis_creds) PRIMARY KEY(key);

Insertion :

Querysql
INSERT INTO redis_table VALUES('1', 1, '1', 1.0), ('2', 2, '2', 2.0);
Querysql
SELECT COUNT(*) FROM redis_table;
Responsetext
┌─count()─┐
│       2 │
└─────────┘
Querysql
SELECT * FROM redis_table WHERE key='1';
Responsetext
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 1   │  1 │ 1  │  1 │
└─────┴────┴────┴────┘
Querysql
SELECT * FROM redis_table WHERE v1=2;
Responsetext
┌─key─┬─v1─┬─v2─┬─v3─┐
│ 2   │  2 │ 2  │  2 │
└─────┴────┴────┴────┘

Mise à jour :

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

Querysql
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';

Supprimer :

Querysql
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.

Querysql
TRUNCATE TABLE redis_table SYNC;

Jointure :

Jointure avec d’autres tables.

Querysql
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é.
Navigation