Bloom Filter는 특정 원소가 집합에 속하는지 여부를 검사하는데 사용되는 확률적 자료 구조입니다.
Bloom Filter는 집합에 속하지 않는 원소를 집합에 속한다고 잘못 판단할 가능성은 존재하지만, 집합에 속한 원소를 집합에 속하지 않는다고 잘못 판단할 가능성은 없습니다.
Bloom Filter는 비트 배열과 여러 개의 해시 함수를 통해 동작합니다. 어떤 값이 들어왔을 때 그 값을 각각의 해시 함수에 입력하고, 그 결과값으로 나온 비트 배열의 위치를 마킹합니다.
해시 함수는 같은 입력값에 대해 항상 같은 결과값을 반환합니다.
값을 찾을 때도 마찬가지로 해시 함수의 결과값을 이용해 비트 배열이 모두 마킹되어 있으면 값이 존재한다고 판단합니다.



일반적인 블룸 필터는 집합에 들어온 값을 제거하는 기능을 지원하지 않습니다.

RedisBloom모듈이 Redis Stack에 포함되면서 Redis에서도 간편하게 Bloom Filter를 사용할 수 있습니다.

도커를 통해 Redis Stack을 간편하게 사용할 수 있습니다.
docker pull redis/redis-stack:latest
docker run -itd --name redis-stack -p 6379:6379 redis/redis-stack:latest
docker exec -it redis-stack redis-cli
// BF.RESERVE <key> <error_rate> <capacity>
BF.RESERVE myBloomFilter 0.01 1000
// BF.ADD <key> <value>
BF.ADD myBloomFilter value1

// BF.MADD <key> <value> <value> ... <value>
BF.MADD myBloomFilter value2 value3

// BF.EXISTS <key> <value>
BF.EXISTS myBloomFilter value1 // 1
BF.EXISTS myBloomFilter value4 // 0

// BF.MEXISTS <key> <value> <value> ... <value>
BF.MEXISTS myBloomFilter value1 value4

불가능합니다.
Bloom Filter는 확률적으로 값의 존재 여부를 반환합니다. 위에서 살펴본 것처럼 비트 배열에 해시값을 저장할 뿐 원본 데이터 자체를 저장하지 않기 때문에 그 값을 반환할 수 없습니다.
