콘텐츠로 이동
Bluetape4k 문서1.11

Filter, script와 분산 primitive

최신 안정판 Bluetape4k 1.11.0 릴리스 기준

확률 자료구조를 정확히 읽는다

섹션 제목: “확률 자료구조를 정확히 읽는다”

Bloom filter의 contains=false는 확실한 부재지만 true는 false positive일 수 있습니다. Cuckoo filter는 삭제를 지원하지만 제한된 bucket에서 insert가 실패할 수 있습니다. 서로 다른 option으로 이미 만든 filter를 다시 초기화하면 예외가 납니다.

val filter = LettuceBloomFilter(
connection,
"blocked-email",
BloomFilterOptions(expectedInsertions = 100_000, falseProbability = 0.01),
)
filter.tryInit()
filter.add("spam@example.com")

HyperLogLog는 정확한 set 크기가 아니라 근사 cardinality를 제공합니다. 과금이나 quota처럼 정확성이 필요한 판단에는 쓰지 않습니다.

RedisScript는 source의 SHA1을 미리 계산합니다. RedisScriptRunner는 sync, async, suspend 모두 EVALSHA를 먼저 실행하고 Redis가 NOSCRIPT를 반환할 때 원문 EVAL로 재시도합니다. 다른 script 오류는 fallback으로 숨기지 않습니다.

AtomicLong, semaphore, lock은 Redis 명령과 Lua script를 조합합니다. lock과 permit은 try/finally에서 반환하고, network 분할이 있는 업무 원자성을 단순 mutex와 동일하게 보지 않습니다.

다음은 운영과 생태계 경로입니다.