Redis HyperLogLog는 확률론적 알고리즘인 HyperLogLog 알고리즘을 사용하여 카디널리티를 추정합니다. 해시 함수 세트와 길이가 m인 비트 배열을 사용하여 HyperLogLog는 세트의 고유 요소 수를 추정할 수 있습니다.
HyperLogLog 알고리즘에서는 각 요소가 해시되고 해시 값을 바이너리로 변환한 후 바이너리 문자열 접두어의 1 개수에 따라 각 요소에 점수가 매겨집니다. 예를 들어 요소의 해시 값이 01110100011인 경우 접두사의 1 개수는 3이므로 HyperLogLog 알고리즘에서 이 요소의 점수는 3입니다.
모든 요소의 점수를 계산할 때 각 점수의 역수(1/2^n)를 취한 다음 이러한 역수를 더하고 역수를 취하여 HyperLogLog 알고리즘의 추정 결과인 카디널리티 추정값을 얻습니다.
HyperLogLog 알고리즘은 비트 배열의 길이 m의 크기를 절충하여 데이터 구조가 차지하는 메모리와 추정값의 정확성(예: 추정 오류)을 손상시키고 데이터 점유 공간 간의 완벽한 균형을 얻습니다. 그리고 오류의 정도가 더 작습니다.
한마디로 HyperLogLog 알고리즘의 핵심 아이디어는 해시 함수와 비트 연산을 기반으로 해시 값을 비트 스트림으로 변환하고 선행 0의 개수를 계산하여 고유 값의 개수를 빠르게 추정하는 것입니다. 대규모 데이터 세트에서. 하이퍼로그로그 알고리즘을 사용하면 매우 큰 데이터세트에서 중복된 웹페이지를 빠르게 식별할 수 있습니다.
Redis HyperLogLog는 컬렉션의 요소 수를 추정하는 데 사용할 수 있는 데이터 구조로, 아주 적은 메모리를 사용하여 대량의 데이터를 유지할 수 있습니다. 기존 추정 알고리즘보다 정확하고, 대용량 데이터 처리 시 속도가 매우 빠르다.
간단한 예로 HyperLogLog를 사용하여 웹사이트를 방문하는 독립 IP 수를 계산할 수 있습니다.
먼저 HyperLogLog 데이터 구조를 생성합니다: PFADD hll:unique_ips 127.0.0.1<code>PFADD hll:unique_ips 127.0.0.1
为每次访问ip添加到unique_ips数据结构中: PFADD hll:unique_ips 192.168.1.1
获取计算集合中元素数量的近似值: PFCOUNT hll:unique_ips
可以通过对多个HyperLogLog结构(例如按天或按小时)的合并,来获得更精确的计数。
需要注意的是,HyperLogLog虽然可以节省大量的内存,但它是一种估计算法,误差范围并不是完全精确的,实际使用时应注意其适用范围。
1. 添加依赖,引入jedis依赖:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency>
2.创建一个Jedis对象:
Jedis jedis = new Jedis("localhost");
3.向HyperLogLog数据结构添加元素:
jedis.pfadd("hll:unique_ips", "127.0.0.1");
4.获取计算集合中元素数量的近似值:
Long count = jedis.pfcount("hll:unique_ips"); System.out.println(count);
5.可以通过对多个HyperLogLog结构的合并来获得更精确的计数。在Jedis中可以使用PFMERGE
PFADD hll:unique_ips 192.168.1.1
계산된 집합의 요소 수에 대한 근사치를 구하세요: PFCOUNT hll :unique_ips
여러 HyperLogLog 구조(예: 일별 또는 시간별)를 병합하여 더 정확한 개수를 얻을 수 있습니다.
HyperLogLog는 많은 메모리를 절약할 수 있지만 추정 알고리즘이므로 실제로 사용할 때 적용 범위가 완전히 정확하지는 않습니다. 3. 페이지 뷰를 사용하여 요청 IP 중복 제거를 구현하는 예jedis.pfmerge("hll:unique_ips", "hll:unique_ips1", "hll:unique_ips2", "hll:unique_ips3");2. Jedis 객체 생성:
Config config = new Config(); config.useSingleServer().setAddress("redis://localhost:6379"); RedissonClient redisson = Redisson.create(config);
RHyperLogLog<String> uniqueIps = redisson.getHyperLogLog("hll:unique_ips");4. 계산 세트의 요소 수에 대한 근사치를 구합니다:
uniqueIps.add("127.0.0.1");
PFMERGE
명령을 사용하여 HyperLogLog 데이터 구조를 병합할 수 있습니다: long approximateCount = uniqueIps.count(); System.out.println(approximateCount);5. Redission 사용 종속성
RHyperLogLog<String> uniqueIps1 = redisson.getHyperLogLog("hll:unique_ips1"); RHyperLogLog<String> uniqueIps2 = redisson.getHyperLogLog("hll:unique_ips2"); uniqueIps.mergeWith(uniqueIps1, uniqueIps2);2. RHyperLogLog 객체 생성
rrreee
4. 대략적인 수량 가져오기rrreee
6. HyperLogLog가 제공하는 기능과 방법페이지 뷰 계산 - 웹 애플리케이션에서 HyperLogLog를 사용하여 각 페이지에 대한 고유 방문자 수를 계산할 수 있습니다. HyperLogLog 기술을 사용하여 다양한 기간에 걸쳐 이 페이지의 평균 방문 수를 계산합니다.
HyperLogLog는 빅 데이터 컬렉션의 사용자 수를 분석하는 데 중요한 유용성을 가지고 있습니다. 확률 기반 데이터 구조는 고유한 사용자 ID와 같은 데이터 세트를 처리할 때 특히 효과적입니다. HyperLogLog는 해싱 후 제한된 수의 해시 값만 저장하며 데이터 세트의 크기를 추론할 수 있습니다.
광고 클릭 수 계산 - 웹사이트나 애플리케이션의 광고 분석을 위해 HyperLogLog를 사용하여 유효 클릭 수, 즉 중복되지 않거나 고유한 클릭 수를 캡처할 수 있습니다.
위 내용은 Redis에서 HyperLogLog 데이터 유형을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!