Redis 클러스터에서 {}(해시태그) 쓰면 생기는 일 정리함👇
🧩 해시태그의 의미
Redis Cluster는 키를 16384개의 슬롯(slot)으로 나눠서 저장함.
슬롯들은 여러 노드에 분배되어 부하 분산됨.
그런데 키에 {} 가 있으면 이야기가 달라짐.
{} 안의 문자열만 해시 계산에 사용됨.
즉 {} 안에 같은 문자열이 있으면 → 전부 같은 슬롯 → 같은 노드에 저장됨 ✅
🔍 예시
키해시 계산 기준결과
| bull:fcmQueue:123 | 전체 문자열 | 슬롯 다르게 → 여러 노드로 분산 |
| bull:{fcmQueue}:123 | {fcmQueue} 부분만 | 전부 같은 슬롯 → 한 노드로 몰림 ✅ |
즉 bull:{fcmQueue}:fcmQueue:* 이런 형태면
모두 {fcmQueue} 기준으로 같은 슬롯 배정 →
클러스터의 한 마스터 노드에만 저장됨
⚙️ 장점
- 같은 Queue 관련 데이터(job, meta 등)가 한 노드에 모이기 때문에
BLPOP, UNLINK, ZSET 같은 작업이 정상적으로 가능함. - BullMQ 같은 큐 라이브러리들이 이걸 의도적으로 씀.
→ {fcmQueue} 해시태그는 “fcmQueue 관련 데이터는 한 곳에 모아라”는 의미임.
.
⚠️ 단점
- {} 안 쓰면 Redis Cluster가 자동으로 분산 → 부하 분산에 유리함.
- 하지만 큐나 락, 트랜잭션처럼 한 곳에서만 처리돼야 하는 구조에는 부적합.
그래서 BullMQ는 기본적으로 {QueueName} 해시태그를 써서
큐별 데이터가 여러 노드로 흩어지지 않게 설계되어 있음.
🧾 요약
항목설명
| {} 있음 | {} 안 문자열 기준 해시 → 한 노드로 몰림 ✅ |
| {} 없음 | 전체 키 기준 해시 → 여러 노드로 분산 |
| BullMQ prefix | bull:{queueName}:... (한 노드로 모이게 설계) |
| 정리 팁 | 중괄호 있으면 해당 슬롯 담당 마스터만 SCAN/UNLINK 하면 됨 |
✅ 결론
bull:{fcmQueue}:fcmQueue:* 패턴은
- 클러스터 전체에 분산되지 않고
- 반드시 한 마스터 노드에 몰려 있음
👉 따라서 그 노드만 찾아서 SCAN / UNLINK 하면 됨.
'TIL' 카테고리의 다른 글
| proxy_temp 파일이 날뛰어서 디스크 꽉 찼던 사건 정리 (1) | 2025.11.18 |
|---|---|
| 서버 CPU 픽 떠서 서버 에러율 높았던 사건 회고록 (0) | 2025.11.17 |
| Redis keys vs Scan 차이 (1) | 2025.11.02 |
| Node Exporter 네트워크 수집 문제 (0) | 2025.10.29 |
| 닷넷 프레임워크 DLL 체험기 (0) | 2025.10.28 |