Redis 의 부 릉 필터 구현
부 릉 필 터 는 하나의 요소 가 집합 에 있 는 지 여 부 를 판단 할 수 있 는 신기 한 데이터 구조 이다.자주 사용 하 는 기능 중 하 나 는 무 거 운 것 을 없 애 는 것 이다.파충류 에서 흔히 볼 수 있 는 수요:목표 사이트 URL 천만,어떤 URL 파충류 가 총애 한 적 이 있 는 지 어떻게 판단 합 니까?간단하게 파충류 가 URL 을 채집 할 때마다 이 URL 을 데이터베이스 에 저장 하고 새로운 URL 이 올 때마다 데이터베이스 에 방문 한 적 이 있 는 지 확인 할 수 있다.
select id from table where url = 'https://jaychen.cc'
그러나 파충류 가 지나 가 는 URL 이 많아 지면 서 요청 할 때마다 데이터 베 이 스 를 한 번 씩 방문 해 야 하 며 이 문자열 에 대한 SQL 조회 효율 은 높 지 않다.데이터 베 이 스 를 제외 하고 Redis 의 set 구 조 를 사용 하면 이 수 요 를 만족 시 킬 수 있 고 성능 이 데이터베이스 보다 우수 하 다.그러나 레 디 스 도 메모리 소모 가 너무 많다 는 문제 가 있다.이때 부 릉 필 터 는 가로로 등장 했다.이 문 제 는 내 가 할 게.데이터베이스 와 Redis 에 비해 부 릉 필 터 를 사용 하면 성능 과 메모리 점용 문 제 를 잘 피 할 수 있 습 니 다.
부 릉 필 터 는 본질 적 으로 하나의 비트 배열 이 고 비트 그룹 은 배열 의 모든 요소 가 1 bit 만 차지한다.모든 원 소 는 0 이나 1 만 있 을 수 있다.이렇게 10000 개의 요 소 를 신청 하 는 자릿수 그룹 은 10000/8=1250 B 의 공간 만 차지한다.부 릉 필 터 는 한 개의 배열 을 제외 하고 K 개의 해시 함수 도 있다.하나의 요소 가 부 릉 필터 에 들 어 갈 때 다음 과 같은 작업 을 합 니 다.
arr
.현재 https://jaychen.cc
을 부 릉 필터 에 삽입 하려 고 합 니 다.글 자 를 못 읽 겠 어 요.아래 영혼 을 보고 손 그림 을 그 려 서 설명 하 세 요.👇👇👇
위의 설명 을 보면 반드시 문 제 를 제기 할 것 이다.삽 입 된 요소 가 원래 많 을 수록 비트 그룹 에서 1 로 설 치 된 위치 가 많아 지고 부 릉 필터 에 없 는 요소 가 해시 계산 을 거 친 후에 얻 은 값 은 비트 그룹 에서 조회 하면 이런 위치 도 모두 1 로 설 치 될 수 있다.부 릉 필터 가 존재 하지 않 는 것 도 부 릉 필터 로 오 판 될 수 있다.그러나 부 릉 필터 가 부 릉 필터 에 요소 가 없다 고 판단 하면 이 값 은 부 릉 필터 에 있 지 않 을 것 이다.쉽게 말 하면:
Redis 의 부 릉 필터
redis 는 4.0 버 전에 module 기능 을 추 가 했 습 니 다.부 릉 필 터 는 module 형식 으로 redis 에 추가 할 수 있 기 때문에 redis 4.0 이상 의 버 전 을 사용 하면 module 을 불 러 와 redis 의 부 릉 필 터 를 사용 할 수 있 습 니 다.그러나 이것 은 가장 쉬 운 방법 이 아니다.docker 를 사용 하면 redis 에서 부 릉 필 터 를 직접 체험 할 수 있다.
> docker run -d -p 6379:6379 --name bloomfilter redislabs/rebloom
> docker exec -it bloomfilter redis-cli
redis 부 릉 필 터 는 주로 두 명령 에 있 습 니 다.bf.add
부 릉 필터 에 요 소 를 추가 합 니 다:bf.add urls https://jaychen.cc
.bf.exists
은 특정한 요소 가 필터 에 있 는 지 여 부 를 판단 합 니 다.bf.exists urls https://jaychen.cc
.error_rate
:부 릉 필터 의 오류 율 을 허용 합 니 다.이 값 은 낮 을 수록 필터 의 자릿수 그룹의 크기 가 클 수록 사용 공간 도 큽 니 다.initial_size
:부 릉 필터 가 저장 할 수 있 는 요소 의 갯 수 는 실제 저 장 된 요소 의 갯 수가 이 값 을 초과 하면 필터 의 정확도 가 떨어진다.
bf.reserve urls 0.01 100
세 개의 매개 변수의 의미:error_rate
의 값 이다.initial_size
의 값 이다.(error) ERR item exists
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
그래프 구조를 무상으로 취급할 수 없는 것은 싫기 때문에, redisgraph를 WSL2에 극치고 설치해 보았습니다.제목은 만우절이므로. 그렇다, 역시, 앞으로는 그래프 구조 데이터베이스라고 생각했다. 생각한 것은 몇 년 전인가. 전부터 Neo4j는 시험하고 있지만, 영업 분들로부터 상용 라이센스가 높다고 가르쳐 주었으므로, 전전...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.