메인 콘텐츠로 건너뛰기
이 엔진을 사용하면 ClickHouse를 Redis와 통합할 수 있습니다. Redis는 키-값(kv) 모델을 사용하므로, where k=xx 또는 where k in (xx, xx)와 같이 특정 키를 지정하는 방식으로만 쿼리할 것을 강력히 권장합니다.

테이블 생성하기

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);
엔진 매개변수
  • host:port — Redis 서버 주소입니다. 포트는 생략할 수 있으며, 이 경우 기본 Redis 포트인 6379가 사용됩니다.
  • db_index — Redis DB 인덱스입니다. 범위는 0~15이고, 기본값은 0입니다.
  • password — 사용자 비밀번호입니다. 기본값은 빈 문자열입니다.
  • pool_size — Redis 최대 연결 풀 크기입니다. 기본값은 16입니다.
  • primary_key_name - 컬럼 목록에 있는 임의의 컬럼 이름입니다.
직렬화PRIMARY KEY는 하나의 컬럼만 지원합니다. 기본 키는 Redis 키로 바이너리 직렬화됩니다. 기본 키를 제외한 컬럼은 해당 순서대로 Redis 값으로 바이너리 직렬화됩니다.
인수는 이름이 지정된 컬렉션을 사용해 전달할 수도 있습니다. 이 경우 hostport는 별도로 지정해야 합니다. 이 방식은 운영 환경에 권장됩니다. 현재는 이름이 지정된 컬렉션을 사용해 Redis에 전달하는 모든 매개변수가 필수입니다.
필터링key equals 또는 in filtering이 있는 쿼리는 Redis의 다중 키 조회로 최적화됩니다. 필터링 키 없이 쿼리하면 전체 테이블 스캔이 발생하며, 이는 비용이 큰 작업입니다.

사용 예시

일반 인수로 Redis engine을 사용하여 ClickHouse에 테이블을 생성합니다:
Query
CREATE TABLE redis_table
(
    `key` String,
    `v1` UInt32,
    `v2` String,
    `v3` Float32
)
ENGINE = Redis('redis1:6379') PRIMARY KEY(key);
또는 이름이 지정된 컬렉션을 사용합니다:
<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);
삽입:
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 │
└─────┴────┴────┴────┘
업데이트: 기본 키(primary key)는 업데이트할 수 없다는 점에 유의하십시오.
Query
ALTER TABLE redis_table UPDATE v1=2 WHERE key='1';
삭제:
Query
ALTER TABLE redis_table DELETE WHERE key='1';
TRUNCATE: Redis DB를 비동기적으로 플러시합니다. 또한 Truncate는 SYNC 모드도 지원합니다.
Query
TRUNCATE TABLE redis_table SYNC;
조인: 다른 테이블과 조인합니다.
Query
SELECT * FROM redis_table JOIN merge_tree_table ON merge_tree_table.key=redis_table.key;

제한 사항

Redis engine는 where k > xx와 같은 스캔 쿼리도 지원하지만, 몇 가지 제한 사항이 있습니다.
  1. 재해싱 중에는 매우 드물게 스캔 쿼리에서 일부 키가 중복되어 반환될 수 있습니다. 자세한 내용은 Redis Scan을 참조하십시오.
  2. 스캔 중에는 키가 생성되거나 삭제될 수 있으므로, 결과 데이터셋은 특정 시점의 유효한 상태를 나타내지 못할 수 있습니다.
마지막 수정일 2026년 6월 10일