Redis에서 중복을 제거하는 방법은 무엇입니까? 다음 글에서는 Redis 중복 제거 방법 4가지를 소개하겠습니다. 도움이 되셨으면 좋겠습니다!
이 글에서는 Redis의 세 가지 고유 계산 방법을 주로 소개합니다. 이 글에서는 SET 기반, 비트 기반, HyperLogLog 기반 세 가지 방법을 설명합니다. 고유 계산은 웹 사이트 시스템의 매우 일반적인 기능입니다. 예를 들어 웹 사이트는 매일 방문하는 고유 방문자 수(즉, UV)를 계산해야 합니다. 계산 문제는 매우 일반적이지만 해결하기가 매우 복잡할 수 있습니다. 첫째, 계산해야 하는 양이 매우 클 수 있습니다. 예를 들어 매일 수백만 명의 사람들이 대규모 사이트를 방문하고 데이터의 양은 둘째, 일반적으로 계산 차원을 확장하는 것이 바람직합니다. 예를 들어 일일 UV 외에도 주간 또는 월간 UV도 알고 싶어하므로 계산이 매우 복잡해집니다. [관련 추천:
Redis 동영상 튜토리얼
]
관계형 데이터베이스에 저장된 시스템에서 고유한 카운팅을 달성하는 방법은 셀렉트 카운트(고유한 )입니다. 매우 간단하지만 데이터 양이 다음과 같은 경우입니다. 크면 이 명령문이 실행됩니다. 매우 느립니다. 관계형 데이터베이스를 사용할 때의 또 다른 문제점은 데이터 삽입 성능이 높지 않다는 것입니다.
Redis는 이러한 종류의 계산 문제를 쉽게 해결할 수 있으며 관계형 데이터베이스보다 더 빠르고 리소스도 덜 소모합니다.
1. 집합 기반 집합
Redis는 고유한 데이터 집합을 저장하는 데 사용됩니다. 이를 통해 집합에 요소가 존재하는지 빠르게 확인할 수 있으며 집합에 포함된 요소의 개수도 빠르게 계산할 수 있습니다. 또한 컬렉션을 새 컬렉션으로 병합할 수 있습니다. 관련된 명령은 다음과 같습니다.
다음과 같이 코드를 복사합니다.
SISMEMBER key member # 判断 member 是否存在
SADD key member # 往集合中加入 member
SCARD key # 获取集合元素个数
집합 기반 방법은 간단하고 효과적이며 계산이 정확하고 널리 적용 가능하며 이해하기 쉽다는 단점이 있습니다. (물론 관계형 데이터베이스에 비하면 훨씬 적습니다.) 요소 수가 많으면(예: 수억 개) 메모리 소모가 엄청납니다.
2. 비트 기반의 비트
Redis는 세트 메모리보다 더 압축된 계산을 구현하는 데 사용할 수 있습니다. 비트 1 또는 0을 사용하여 요소 존재 여부에 대한 정보를 저장합니다. 예를 들어, 웹 사이트의 순 방문자 수의 경우 user_id를 비트의 오프셋으로 사용할 수 있습니다. 1로 설정하면 액세스를 나타낼 수 있습니다. 1MB의 공간을 사용하면 8백만 명 이상의 사용자가 하루에 액세스할 수 있습니다. . 관련된 명령은 다음과 같습니다.
다음과 같이 코드를 복사하세요. SETBIT key offset value # 设置位信息
GETBIT key offset # 获取位信息
BITCOUNT key [start end] # 计数
BITOP operation destkey key [key ...] # 位图合并
비트 기반 방식은 set 방식에 비해 훨씬 적은 공간을 차지하지만 요소를 단순히 비트 오프셋에 매핑할 수 있어야 하며 적용 가능한 범위도 훨씬 좁습니다. 최대 오프셋에 따라 소모되며, 이동량은 카운트 값과 관련이 없습니다. 최대 오프셋이 크면 메모리 소모가 상당해집니다.
3 HyperLogLog
기반으로 엄청나게 많은 양의 데이터를 정확하게 고유하게 계산하는 것은 어렵지만 대략적으로만 계산하면 컴퓨팅 과학에는 효율적인 알고리즘이 많이 있으며 그중 HyperLogLog Counting이 매우 유명합니다. 알고리즘은 약 12K의 메모리만 사용하여 수억 개의 고유 카운트를 달성할 수 있으며 오류는 약 1%로 제어됩니다. 관련된 명령은 다음과 같습니다.
다음과 같이 코드를 복사하세요. PFADD key element [element ...] # 加入元素
PFCOUNT key [key ...] # 计数
이 계산 방법은 통계에 일부 균일 분포, 무작위 확률, 베르누이 분포 등이 포함되어 있습니다. 관심이 있으시면 공부해 보세요. 깊이.
redis에서 제공하는 세 가지 고유한 계산 방법은 각각 고유한 장점과 단점이 있으며 다양한 상황에서 계산 요구 사항을 완전히 충족할 수 있습니다.
4. Bloomfilter
BloomFilter는 비트맵이나 비트세트와 유사한 데이터 구조를 사용하여 데이터를 저장하고, 비트 배열을 사용하여 세트를 간결하게 표현하며, 이 세트에 요소가 이미 존재하는지 빠르게 확인할 수 있습니다. BloomFilter가 100% 정확하지는 않지만 매개 변수, 사용되는 해시 함수 수 및 비트 배열 크기를 조정하면 오류율을 줄일 수 있습니다. 이 조정을 통해 오류율을 0에 가깝게 완전히 줄일 수 있습니다. 대부분의 시나리오를 충족할 수 있습니다.
집합 S = {x1, x2, … xn}이 있는 경우 Bloom Filter는 k개의 독립적인 해시 함수를 사용하여 집합의 각 요소를 {1,…,m} 범위에 매핑합니다. 모든 요소에 대해 매핑된 숫자는 해당 비트 배열의 인덱스로 사용되며 비트는 1로 설정됩니다. 예를 들어 요소 x1은 해시 함수에 의해 숫자 8에 매핑된 다음 비트 배열의 8번째 비트가 1로 설정됩니다. 아래 그림에서 집합 S에는 각각 3개의 해시 함수로 매핑된 두 개의 요소 x와 y만 있습니다. 매핑된 위치는 각각 (0, 3, 6) 및 (4, 7, 10)이며 해당 비트입니다. 1:
이제 이 집합에 다른 요소가 있는지 확인하려면 해당 위치에 0이 있는지 확인하기 위해 이 세 가지 해시 함수만 매핑하면 됩니다. 따라서 이는 이 요소가 이 세트에 확실히 존재하지 않는다는 것을 의미합니다. 그렇지 않으면 존재할 수도 있습니다.
Redis는 Bloom 필터를 사용하기 위해 플러그인을 설치해야 합니다: https://blog.csdn.net/u013030276/article/details/88350641
.
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 소개를 방문하세요! !
위 내용은 Redis에서 중복을 제거하는 방법은 무엇입니까? 중복을 제거하는 4가지 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!