목차
1. HyperLogLog의 원리
2. 사용 단계:
3.实现请求ip去重的浏览量使用示例
4.Jedis客户端使用
데이터 베이스 Redis Redis에서 HyperLogLog 데이터 유형을 사용하는 방법

Redis에서 HyperLogLog 데이터 유형을 사용하는 방법

May 29, 2023 am 09:29 AM
redis hyperloglog

1. HyperLogLog의 원리

Redis HyperLogLog는 확률론적 알고리즘인 HyperLogLog 알고리즘을 사용하여 카디널리티를 추정합니다. 해시 함수 세트와 길이가 m인 비트 배열을 사용하여 HyperLogLog는 세트의 고유 요소 수를 추정할 수 있습니다.

HyperLogLog 알고리즘에서는 각 요소가 해시되고 해시 값을 바이너리로 변환한 후 바이너리 문자열 접두어의 1 개수에 따라 각 요소에 점수가 매겨집니다. 예를 들어 요소의 해시 값이 01110100011인 경우 접두사의 1 개수는 3이므로 HyperLogLog 알고리즘에서 이 요소의 점수는 3입니다.

 모든 요소의 점수를 계산할 때 각 점수의 역수(1/2^n)를 취한 다음 이러한 역수를 더하고 역수를 취하여 HyperLogLog 알고리즘의 추정 결과인 카디널리티 추정값을 얻습니다.

 HyperLogLog 알고리즘은 비트 배열의 길이 m의 크기를 절충하여 데이터 구조가 차지하는 메모리와 추정값의 정확성(예: 추정 오류)을 손상시키고 데이터 점유 공간 간의 완벽한 균형을 얻습니다. 그리고 오류의 정도가 더 작습니다.

 한마디로 HyperLogLog 알고리즘의 핵심 아이디어는 해시 함수와 비트 연산을 기반으로 해시 값을 비트 스트림으로 변환하고 선행 0의 개수를 계산하여 고유 값의 개수를 빠르게 추정하는 것입니다. 대규모 데이터 세트에서. 하이퍼로그로그 알고리즘을 사용하면 매우 큰 데이터세트에서 중복된 웹페이지를 빠르게 식별할 수 있습니다.

2. 사용 단계:

 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虽然可以节省大量的内存,但它是一种估计算法,误差范围并不是完全精确的,实际使用时应注意其适用范围。

3.实现请求ip去重的浏览量使用示例

Redis에서 HyperLogLog 데이터 유형을 사용하는 방법

4.Jedis客户端使用

  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

unique_ips 데이터 구조에 각 액세스 IP를 추가하세요: PFADD hll:unique_ips 192.168.1.1

계산된 집합의 요소 수에 대한 근사치를 구하세요: PFCOUNT hll :unique_ips

여러 HyperLogLog 구조(예: 일별 또는 시간별)를 병합하여 더 정확한 개수를 얻을 수 있습니다.

HyperLogLog는 많은 메모리를 절약할 수 있지만 추정 알고리즘이므로 실제로 사용할 때 적용 범위가 완전히 정확하지는 않습니다.

3. 페이지 뷰를 사용하여 요청 IP 중복 제거를 구현하는 예
  • Redis 방법 HyperLogLog 데이터 유형을 사용하려면

    4. Jedis 클라이언트 사용
  •  1. 종속성을 추가하고 jedis 종속성을 도입합니다:

    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);
    로그인 후 복사
  •  3. HyperLogLog 데이터 구조에 요소를 추가합니다:

    RHyperLogLog<String> uniqueIps = redisson.getHyperLogLog("hll:unique_ips");
    로그인 후 복사

     4. 계산 세트의 요소 수에 대한 근사치를 구합니다:
  • uniqueIps.add("127.0.0.1");
    로그인 후 복사
  •   5. 여러 HyperLogLog 구조를 병합하면 더 정확한 개수를 얻을 수 있습니다. Jedis에서 PFMERGE 명령을 사용하여 HyperLogLog 데이터 구조를 병합할 수 있습니다:

    long approximateCount = uniqueIps.count();
    System.out.println(approximateCount);
    로그인 후 복사

    5. Redission 사용 종속성
  •   1. RedissonClient 객체 생성

    RHyperLogLog<String> uniqueIps1 = redisson.getHyperLogLog("hll:unique_ips1");
    RHyperLogLog<String> uniqueIps2 = redisson.getHyperLogLog("hll:unique_ips2");
    uniqueIps.mergeWith(uniqueIps1, uniqueIps2);
    로그인 후 복사
    2. RHyperLogLog 객체 생성 rrreee 3. 요소 추가

    rrreee

      4. 대략적인 수량 가져오기
      rrreee
    • 5. 여러 HyperLogLog 개체 병합

      rrreee

      6. HyperLogLog가 제공하는 기능과 방법
    • 기능:

    • 정확도는 낮지만 시간이 걸립니다. 메모리가 거의 없습니다.

    • 중복 계산 없이 새 요소 삽입을 지원합니다.

    메모리 사용량과 계산 정확도를 최적화하기 위한 지침을 제공합니다. 예를 들어 PFADD, PFCOUNT, PFMERGE 및 기타 지침이 있습니다.

    데이터 세트에 있는 다양한 요소의 수, 즉 세트의 카디널리티를 추정할 수 있습니다.

    여러 HyperLogLog 개체에 대한 병합 작업을 지원하여 이러한 컬렉션의 전체 카디널리티에 대한 근사치를 얻습니다. 🎜🎜🎜🎜HyperLogLog에서 일반적으로 사용되는 방법: 🎜🎜🎜🎜PFADD 키 요소 [요소 ...]: HyperLogLog 구조에 하나 이상의 요소를 추가합니다. 🎜🎜🎜🎜PFCOUNT 키 [key...]: 하나 이상의 HyperLogLog 구조에 대한 카디널리티 추정치를 가져옵니다. 🎜🎜🎜🎜PFMERGE destkey sourcekey [sourcekey ...]: 하나 이상의 HyperLogLog 구조를 대상 구조에 병합합니다. 🎜🎜🎜🎜PFSELFTEST [numtests]: HyperLogLog 추정 성능 및 정확성 테스트(Redis4.0+ 버전만 해당)🎜🎜🎜🎜  HyperLogLog는 많은 메모리를 절약할 수 있지만 여전히 추정 알고리즘이라는 점에 유의해야 합니다. 마진은 완전히 정확하지 않으며 약간의 계산 비용이 듭니다. 실제 애플리케이션에 따라 요소 수를 추정하기 위해 HyperLogLog를 사용할지 또는 다른 데이터 구조를 사용할지 여부를 고려해야 합니다. 🎜🎜7. 사용 시나리오 요약: 🎜🎜 HyperLogLog를 사용하는 Redis의 주요 기능은 대규모 데이터 스트림(뷰, IP, 도시)의 경우 중복 제거 계산을 수행하는 것입니다. 🎜🎜구체적으로 다음은 Redis HyperLogLog가 중복 제거 및 계산에 사용되는 몇 가지 시나리오입니다. 🎜
    • 페이지 뷰 계산 - 웹 애플리케이션에서 HyperLogLog를 사용하여 각 페이지에 대한 고유 방문자 수를 계산할 수 있습니다. HyperLogLog 기술을 사용하여 다양한 기간에 걸쳐 이 페이지의 평균 방문 수를 계산합니다.

    • HyperLogLog는 빅 데이터 컬렉션의 사용자 수를 분석하는 데 중요한 유용성을 가지고 있습니다. 확률 기반 데이터 구조는 고유한 사용자 ID와 같은 데이터 세트를 처리할 때 특히 효과적입니다. HyperLogLog는 해싱 후 제한된 수의 해시 값만 저장하며 데이터 세트의 크기를 추론할 수 있습니다.

    • 광고 클릭 수 계산 - 웹사이트나 애플리케이션의 광고 분석을 위해 HyperLogLog를 사용하여 유효 클릭 수, 즉 중복되지 않거나 고유한 클릭 수를 캡처할 수 있습니다.

    위 내용은 Redis에서 HyperLogLog 데이터 유형을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Redis 클러스터 모드를 구축하는 방법 Redis 클러스터 모드를 구축하는 방법 Apr 10, 2025 pm 10:15 PM

Redis Cluster Mode는 Sharding을 통해 Redis 인스턴스를 여러 서버에 배포하여 확장 성 및 가용성을 향상시킵니다. 시공 단계는 다음과 같습니다. 포트가 다른 홀수 redis 인스턴스를 만듭니다. 3 개의 센티넬 인스턴스를 만들고, Redis 인스턴스 및 장애 조치를 모니터링합니다. Sentinel 구성 파일 구성, Redis 인스턴스 정보 및 장애 조치 설정 모니터링 추가; Redis 인스턴스 구성 파일 구성, 클러스터 모드 활성화 및 클러스터 정보 파일 경로를 지정합니다. 각 redis 인스턴스의 정보를 포함하는 Nodes.conf 파일을 작성합니다. 클러스터를 시작하고 Create 명령을 실행하여 클러스터를 작성하고 복제본 수를 지정하십시오. 클러스터에 로그인하여 클러스터 정보 명령을 실행하여 클러스터 상태를 확인하십시오. 만들다

Redis 명령을 사용하는 방법 Redis 명령을 사용하는 방법 Apr 10, 2025 pm 08:45 PM

Redis 지시 사항을 사용하려면 다음 단계가 필요합니다. Redis 클라이언트를 엽니 다. 명령 (동사 키 값)을 입력하십시오. 필요한 매개 변수를 제공합니다 (명령어마다 다름). 명령을 실행하려면 Enter를 누르십시오. Redis는 작업 결과를 나타내는 응답을 반환합니다 (일반적으로 OK 또는 -err).

Redis 데이터를 지우는 방법 Redis 데이터를 지우는 방법 Apr 10, 2025 pm 10:06 PM

Redis 데이터를 지우는 방법 : Flushall 명령을 사용하여 모든 키 값을 지우십시오. FlushDB 명령을 사용하여 현재 선택한 데이터베이스의 키 값을 지우십시오. 선택을 사용하여 데이터베이스를 전환 한 다음 FlushDB를 사용하여 여러 데이터베이스를 지우십시오. del 명령을 사용하여 특정 키를 삭제하십시오. Redis-Cli 도구를 사용하여 데이터를 지우십시오.

단일 스레드 레 디스를 사용하는 방법 단일 스레드 레 디스를 사용하는 방법 Apr 10, 2025 pm 07:12 PM

Redis는 단일 스레드 아키텍처를 사용하여 고성능, 단순성 및 일관성을 제공합니다. 동시성을 향상시키기 위해 I/O 멀티플렉싱, 이벤트 루프, 비 블로킹 I/O 및 공유 메모리를 사용하지만 동시성 제한 제한, 단일 고장 지점 및 쓰기 집약적 인 워크로드에 부적합한 제한이 있습니다.

Redis의 소스 코드를 읽는 방법 Redis의 소스 코드를 읽는 방법 Apr 10, 2025 pm 08:27 PM

Redis 소스 코드를 이해하는 가장 좋은 방법은 단계별로 이동하는 것입니다. Redis의 기본 사항에 익숙해집니다. 특정 모듈을 선택하거나 시작점으로 기능합니다. 모듈 또는 함수의 진입 점으로 시작하여 코드를 한 줄씩 봅니다. 함수 호출 체인을 통해 코드를 봅니다. Redis가 사용하는 기본 데이터 구조에 익숙해 지십시오. Redis가 사용하는 알고리즘을 식별하십시오.

Redis에서 모든 키를 보는 방법 Redis에서 모든 키를 보는 방법 Apr 10, 2025 pm 07:15 PM

Redis에서 모든 키를 보려면 세 가지 방법이 있습니다. 키 명령을 사용하여 지정된 패턴과 일치하는 모든 키를 반환하십시오. 스캔 명령을 사용하여 키를 반복하고 키 세트를 반환하십시오. 정보 명령을 사용하여 총 키 수를 얻으십시오.

기본 Redis를 구현하는 방법 기본 Redis를 구현하는 방법 Apr 10, 2025 pm 07:21 PM

Redis는 해시 테이블을 사용하여 데이터를 저장하고 문자열, 목록, 해시 테이블, 컬렉션 및 주문한 컬렉션과 같은 데이터 구조를 지원합니다. Redis는 Snapshots (RDB)를 통해 데이터를 유지하고 WRITE 전용 (AOF) 메커니즘을 추가합니다. Redis는 마스터 슬레이브 복제를 사용하여 데이터 가용성을 향상시킵니다. Redis는 단일 스레드 이벤트 루프를 사용하여 연결 및 명령을 처리하여 데이터 원자력과 일관성을 보장합니다. Redis는 키의 만료 시간을 설정하고 게으른 삭제 메커니즘을 사용하여 만료 키를 삭제합니다.

Redis 대기열을 읽는 방법 Redis 대기열을 읽는 방법 Apr 10, 2025 pm 10:12 PM

Redis의 대기열을 읽으려면 대기열 이름을 얻고 LPOP 명령을 사용하여 요소를 읽고 빈 큐를 처리해야합니다. 특정 단계는 다음과 같습니다. 대기열 이름 가져 오기 : "큐 :"와 같은 "대기열 : my-queue"의 접두사로 이름을 지정하십시오. LPOP 명령을 사용하십시오. 빈 대기열 처리 : 대기열이 비어 있으면 LPOP이 NIL을 반환하고 요소를 읽기 전에 대기열이 존재하는지 확인할 수 있습니다.

See all articles