Saltar al contenido principal
Este motor permite integrar ClickHouse con Redis. Dado que Redis utiliza un modelo clave-valor, recomendamos encarecidamente realizar únicamente consultas puntuales, como where k=xx o where k in (xx, xx).

Crear una tabla

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);
Parámetros del motor
  • host:port — dirección del servidor Redis; puede omitir el puerto y se usará el puerto predeterminado de Redis, 6379.
  • db_index — el índice de la base de datos de Redis va de 0 a 15; el valor predeterminado es 0.
  • password — contraseña del usuario; el valor predeterminado es una cadena vacía.
  • pool_size — tamaño máximo del grupo de conexiones de Redis; el valor predeterminado es 16.
  • primary_key_name - cualquier nombre de columna de la lista de columnas.
SerializaciónPRIMARY KEY solo admite una columna. La clave primaria se serializará en binario como una clave de Redis. Las columnas distintas de la clave primaria se serializarán en binario como valor de Redis en el orden correspondiente.
Los argumentos también pueden pasarse mediante colecciones con nombre. En este caso, host y port deben especificarse por separado. Este enfoque se recomienda para entornos de producción. En este momento, todos los parámetros pasados a Redis mediante colecciones con nombre son obligatorios.
FiltradoLas consultas con key equals o con filtrado in se optimizarán para realizar búsquedas de múltiples claves en Redis. Si las consultas no incluyen una clave de filtrado, se realizará un escaneo completo de la tabla, lo que supone una operación costosa.

Ejemplo de uso

Cree una tabla en ClickHouse usando el motor Redis con argumentos básicos:
Query
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);
O bien usando colecciones con nombre:
<named_collections>
    <redis_creds>
        <host>localhost</host>
        <port>6379</port>
        <password>****</password>
        <pool_size>16</pool_size>
        <db_index>s0</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);
Inserción:
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 │
└─────┴────┴────┴────┘
Actualización: Tenga en cuenta que la clave primaria no se puede actualizar.
Query
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';
Eliminar:
Query
ALTER TABLE redis_table DELETE WHERE key='1';
TRUNCATE: Vacía la base de datos de Redis de forma asíncrona. Además, Truncate también admite el modo SYNC.
Query
TRUNCATE TABLE redis_table SYNC;
Join: Join con otras tablas.
Query
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;

Limitaciones

El motor Redis también admite consultas de escaneo, como where k > xx, pero tiene algunas limitaciones:
  1. En casos muy poco frecuentes, una consulta de escaneo puede producir claves duplicadas durante el rehashing. Consulta más detalles en Redis Scan.
  2. Durante el escaneo, las claves pueden crearse y eliminarse, por lo que el conjunto de datos resultante no puede representar un momento concreto en el tiempo.
Última modificación el 10 de junio de 2026