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去重的浏览量使用示例
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
PFADD hll:unique_ips 192.168.1.1
계산된 집합의 요소 수에 대한 근사치를 구하세요: PFCOUNT hll :unique_ips
여러 HyperLogLog 구조(예: 일별 또는 시간별)를 병합하여 더 정확한 개수를 얻을 수 있습니다. HyperLogLog는 많은 메모리를 절약할 수 있지만 추정 알고리즘이므로 실제로 사용할 때 적용 범위가 완전히 정확하지는 않습니다. 3. 페이지 뷰를 사용하여 요청 IP 중복 제거를 구현하는 예4. Jedis 클라이언트 사용
- 1. 종속성을 추가하고 jedis 종속성을 도입합니다:2. Jedis 객체 생성:
jedis.pfmerge("hll:unique_ips", "hll:unique_ips1", "hll:unique_ips2", "hll:unique_ips3");
로그인 후 복사 - 3. HyperLogLog 데이터 구조에 요소를 추가합니다: 4. 계산 세트의 요소 수에 대한 근사치를 구합니다:
RHyperLogLog<String> uniqueIps = redisson.getHyperLogLog("hll:unique_ips");
로그인 후 복사 - 5. 여러 HyperLogLog 구조를 병합하면 더 정확한 개수를 얻을 수 있습니다. Jedis에서
PFMERGE
명령을 사용하여 HyperLogLog 데이터 구조를 병합할 수 있습니다:5. Redission 사용 종속성long approximateCount = uniqueIps.count(); System.out.println(approximateCount);
로그인 후 복사 - 1. RedissonClient 객체 생성 2. RHyperLogLog 객체 생성 rrreee 3. 요소 추가
RHyperLogLog<String> uniqueIps1 = redisson.getHyperLogLog("hll:unique_ips1"); RHyperLogLog<String> uniqueIps2 = redisson.getHyperLogLog("hll:unique_ips2"); uniqueIps.mergeWith(uniqueIps1, uniqueIps2);
로그인 후 복사rrreee
4. 대략적인 수량 가져오기- rrreee
- 5. 여러 HyperLogLog 개체 병합
rrreee
6. HyperLogLog가 제공하는 기능과 방법 - 기능:
- 정확도는 낮지만 시간이 걸립니다. 메모리가 거의 없습니다.
- 중복 계산 없이 새 요소 삽입을 지원합니다.
페이지 뷰 계산 - 웹 애플리케이션에서 HyperLogLog를 사용하여 각 페이지에 대한 고유 방문자 수를 계산할 수 있습니다. HyperLogLog 기술을 사용하여 다양한 기간에 걸쳐 이 페이지의 평균 방문 수를 계산합니다.
HyperLogLog는 빅 데이터 컬렉션의 사용자 수를 분석하는 데 중요한 유용성을 가지고 있습니다. 확률 기반 데이터 구조는 고유한 사용자 ID와 같은 데이터 세트를 처리할 때 특히 효과적입니다. HyperLogLog는 해싱 후 제한된 수의 해시 값만 저장하며 데이터 세트의 크기를 추론할 수 있습니다.
광고 클릭 수 계산 - 웹사이트나 애플리케이션의 광고 분석을 위해 HyperLogLog를 사용하여 유효 클릭 수, 즉 중복되지 않거나 고유한 클릭 수를 캡처할 수 있습니다.
위 내용은 Redis에서 HyperLogLog 데이터 유형을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
- 5. 여러 HyperLogLog 개체 병합
Config config = new Config(); config.useSingleServer().setAddress("redis://localhost:6379"); RedissonClient redisson = Redisson.create(config);
uniqueIps.add("127.0.0.1");

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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