Redis Semantic Cache — 벡터 인덱스로 구현한다
Redis Semantic Cache — 벡터 인덱스로 구현한다
Redis 문서는 의미가 같으면(byte 단위가 아니라) 답을 재사용하는 시맨틱 캐시를 Redis의 벡터 검색(Redis Search + KNN)으로 구현하는 방법을 다뤄요. 재구성된 질문·근사 중복 질문이 embed-retrieve-generate 파이프라인을 건너뛰게 해요.
동작의 세 단계
- 임베드(embed): 들어온 질문을 벡터로 인코딩해요.
- 조회(lookup): 저장된 프롬프트 벡터를 KNN으로 검색해 거리 임계값과 비교해요.
- hit/miss: 임계값 안이면 캐시 응답 반환, 아니면 LLM을 호출하고 새 항목을 저장해요.
핵심 설계 포인트
- 하드 메타데이터 경계: 테넌트·로케일·모델 버전 같은 메타데이터 필터를 유사도 질의 안에 넣어, 다른 범주로 재사용되는 것을 막아요.
- TTL·캐시 퇴출: 오래된 답변을 자동 만료시키고 메모리 압박 시 엔트리를 버려요.
- 단일 인덱스로 커버: 한 Redis Search 인덱스가 임베딩 필드와 메타데이터 필드를 함께 담아 한 번의
FT.SEARCH(KNN)으로 처리해요.
주의
임계값 튜닝이 핵심이에요. 너무 느슨하면 틀린 답, 너무 빡빡하면 hit율이 떨어져요. 캐시는 항상 '비권위적(non-authoritative)'이고 언제든 재구축 가능하게 설계하는 게 좋아요.