찾다
데이터 베이스RedisRedis 비트맵을 사용하여 활성 사용자 수 계산

먼저 시나리오를 살펴보겠습니다. 웹사이트는 일주일 이내에 지속적으로 로그인한 사용자와 한 달 이내에 로그인한 사용자를 계산해야 합니다.

Mysql과 같은 기존 데이터베이스를 사용하여 구현하면 달성하기 어려울 것입니다. 하지만 Redis를 사용하면 매우 간단합니다. Redis의 컬렉션 유형과 비트맵 유형을 쉽게 구현할 수 있습니다. 오늘은 비트맵을 사용하여 활성 사용자 계산 기능을 구현하는 방법에 대해 주로 이야기하겠습니다.

Bitmaps

컴퓨터 시스템에서 정보의 가장 작은 단위는 바이트이고, 1바이트는 8비트와 같고, 각 비트는 0 또는 1만 될 수 있습니다(컴퓨터는 이 두 숫자만 인식합니다). 비트맵을 사용하면 비트를 직접 조작할 수 있습니다.

Bigmaps는 배열로 간주될 수 있습니다. 배열의 각 비트는 0 또는 1일 수 있습니다. 여기서 배열의 첨자는 오프셋으로 간주됩니다.

비트맵과 관련된 몇 가지 명령어를 소개하겠습니다.

setbit

setbit 키 오프셋 값: 해당 비트에 값을 설정합니다.

예를 들어 오늘은 사용자 3, 8, 23이 있습니다. , 32가 웹사이트를 방문한 후

setbit user:view:2020-5-17 3 1
setbit user:view:2020-5-17 8 1
setbit user:view:2020-5-17 23 1
setbit user:view:2020-5-17 32 1

개발 팁: 많은 애플리케이션 ID는 1부터 시작하지 않지만 1001, 10001과 같이 지정된 숫자로 시작하는 경우도 많습니다. 이를 위해 공간 낭비를 방지하기 위해 설정 시 초기 값을 먼저 빼면 됩니다

getbit

getbit 키 오프셋 지정된 비트의 값을 가져옵니다

사용자 수를 알고 싶다면 8 and 45 today 8번 사용자가 로그인했는지 여부에 관계없이

127.0.0.1:6379> getbit user:view:2020-5-17 8
(integer) 1
127.0.0.1:6379> getbit user:view:2020-5-17 45
(integer) 0

에서는 8번 사용자가 오늘 로그인했지만 45번 사용자는 오늘 로그인하지 않았음을 알 수 있습니다.

bitcount

bitcount key [start] [end] 1

지정된 범위의 숫자를 가져옵니다. 오늘 로그인한 사용자 수를 알고 싶습니다. 그런 다음

127.0.0.1:6379> bitcount user:view:2020-5-17
(integer) 4

Bitmaps 작업

bitop op destkey key [key ...]

bitop 명령은 여러 비트맵의 교차(and), 합집합(or), 비(not), 배타적 또는(xor)를 수행할 수 있으며 작업 결과 destkey에 저장됩니다.

3일 연속 로그인한 사용자 수, 즉 5월 17일, 18일, 19일에 로그인한 사용자 수를 알고 싶다면.

지난 3일 동안의 로그인 상황은 다음과 같습니다.

  • 5월 17일 3, 8, 23, 32번 로그인

  • 3, 23, 43, 54번 사용자가 5월 18일 로그인

  • 5월 19일 3, 5, 23, 32, 56, 78에 로그인한 사용자

127.0.0.1:6379> bitop and three:and user:view:2020-5-17 user:view:2020-5-18 user:view:2020-5-19
127.0.0.1:6379> bitcount three:and
(integer) 2

이 3일 동안 얼마나 많은 사용자가 로그인했는지 알고 싶다면.

127.0.0.1:6379> bitop or three:or user:view:2020-5-17 user:view:2020-5-18 user:view:2020-5-19
(integer) 10
127.0.0.1:6379> bitcount three:or
(integer) 9

보시다시피 지난 3일 동안 총 9명의 사용자가 로그인했습니다.

실전 전투

위의 지식에 대해 이야기하면 원하는 요구 사항을 완료할 수 있습니다. 일주일 이내에 지속적으로 로그인한 사용자와 한 달 이내에 로그인한 사용자를 계산해야 합니다.

먼저 30일 이내에 사용자 로그인 상황을 시뮬레이션합니다.

for ($i = 0; $i < 20000; $i++) {
    $userId = mt_rand(1, 10000);
    $date   = time() - 86400 * mt_rand(0, 30);
    $key   = &#39;userlogin_&#39;.date(&#39;Ymd&#39;, $date);
 
    $redis->setBit($key, $userId, 1);
}

일주일 이내에 로그인한 사용자를 가져옵니다. 물론 한꺼번에 가져오지는 않지만 페이징하려고 합니다. 의사 코드는 다음과 같습니다:

for ($i = 1; $i <= 7; $i ++) {
    $key = "userlogin_".date(&#39;Ymd&#39;, time() - (86400*$i));
 
    if ($i == 1) {
        $redis->bitOp(&#39;and&#39;, &#39;week_logined&#39;, $key);
    } else {
        $redis->bitOp(&#39;and&#39;, &#39;week_logined&#39;, &#39;week_logined&#39;, $key);
    }
}
 
// 获取前50个用户
$userIds = [];
for ($i=1; $i<=10000; $i++) {
    $ret = $redis->getBit(&#39;week_logined&#39;, $i);
    $ret && $userIds[] = $i;
 
    if (count($userIds) >=50) break;
}

여기서 주의할 점이 있는데, 이는 또한 처음으로 bitop 중에 week_logined가 존재하지 않기 때문에 실수하기 쉽습니다. 그러나 작업을 수행하는 데 필요한 키는 단 하나뿐입니다. 두 번째부터 시작할 때 작업을 수행하는 키는 2개입니다.

한 달 이내에 로그인한 사용자를 확보하기 위해, and를 or로 변경하는 것을 제외하고는 기본적으로 위와 동일합니다

for ($i = 1; $i <= 3; $i ++) {
    $key = "userlogin_".date(&#39;Ymd&#39;, time() - (86400*$i));
    $redis->bitOp(&#39;or&#39;, &#39;month_loginOnce&#39;, &#39;month_loginOnce&#39;, $key);
}
 
// 获取一个月内登陆过的用户
$userIds = [];
for ($i=1; $i<=10000; $i++) {
    $ret = $redis->getBit(&#39;month_loginOnce&#39;, $i);
    $ret && $userIds[] = $i;
}

or 및 and를 하는 것에는 약간의 차이가 있음을 알 수 있습니다. 또는 처음으로 판단할 필요가 없습니다. 그 이유는 다들 이해하실 겁니다.

위 내용은 Redis 비트맵을 사용하여 활성 사용자 수 계산의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
REDIS : 응용 프로그램 성능 및 확장 성 향상REDIS : 응용 프로그램 성능 및 확장 성 향상Apr 17, 2025 am 12:16 AM

Redis는 데이터를 캐싱하여 분산 잠금 및 데이터 지속성을 구현하여 응용 프로그램 성능 및 확장 성을 향상시킵니다. 1) 캐시 데이터 : Redis를 사용하여 데이터 액세스 속도를 향상시키기 위해 자주 액세스하는 데이터를 캐시합니다. 2) 분산 잠금 : Redis를 사용하여 분산 된 잠금 장치를 구현하여 분산 환경에서 작동의 보안을 보장합니다. 3) 데이터 지속성 : 데이터 손실을 방지하기위한 RDB 및 AOF 메커니즘을 통한 데이터 보안을 보장합니다.

Redis : 데이터 모델과 구조 탐색Redis : 데이터 모델과 구조 탐색Apr 16, 2025 am 12:09 AM

Redis의 데이터 모델 및 구조에는 5 가지 주요 유형이 포함됩니다. 1. 문자열 : 텍스트 또는 이진 데이터를 저장하는 데 사용되며 원자 연산을 지원합니다. 2. 목록 : 정렬 된 요소 컬렉션, 대기열 및 스택에 적합합니다. 세트 : 세트 작동을 지원하는 비 순차 고유 요소 세트. 4. 순서 세트 (SortedSet) : 순위에 적합한 점수가있는 고유 한 요소 세트. 5. 해시 테이블 (HASH) : 객체를 저장하는 데 적합한 키 값 쌍 모음.

REDIS : 데이터베이스 접근 방식을 분류합니다REDIS : 데이터베이스 접근 방식을 분류합니다Apr 15, 2025 am 12:06 AM

Redis의 데이터베이스 방법에는 메모리 인 데이터베이스 및 키 값 저장소가 포함됩니다. 1) Redis는 메모리에 데이터를 저장하고 빠르게 읽고 쓰고 있습니다. 2) 키 값 쌍을 사용하여 데이터를 저장하고 캐시 및 NOSQL 데이터베이스에 적합한 목록, 컬렉션, 해시 테이블 및 주문 컬렉션과 같은 복잡한 데이터 구조를 지원합니다.

왜 Redis를 사용합니까? 혜택과 장점왜 Redis를 사용합니까? 혜택과 장점Apr 14, 2025 am 12:07 AM

Redis는 빠른 성능, 풍부한 데이터 구조, 고 가용성 및 확장 성, 지속성 기능 및 광범위한 생태계 지원을 제공하기 때문에 강력한 데이터베이스 솔루션입니다. 1) 매우 빠른 성능 : Redis의 데이터는 메모리에 저장되며 동시성이 높고 대기 시간이 낮은 응용 프로그램에 적합한 빠른 읽기 및 쓰기 속도를 가지고 있습니다. 2) 풍부한 데이터 구조 : 다양한 시나리오에 적합한 목록, 컬렉션 등과 같은 여러 데이터 유형을 지원합니다. 3) 고 가용성 및 확장 성 : 마스터 슬레이브 복제 및 클러스터 모드를 지원하여 고 가용성 및 수평 확장 성을 달성합니다. 4) 지속성 및 데이터 보안 : 데이터 지속성은 RDB 및 AOF를 통해 달성되어 데이터 무결성 및 신뢰성을 보장합니다. 5) 광범위한 생태계 및 지역 사회 지원 : 거대한 생태계와 활동적인 커뮤니티,

NOSQL 이해 : Redis의 주요 기능NOSQL 이해 : Redis의 주요 기능Apr 13, 2025 am 12:17 AM

Redis의 주요 기능에는 속도, 유연성 및 풍부한 데이터 구조 지원이 포함됩니다. 1) 속도 : Redis는 메모리 내 데이터베이스이며, 읽기 및 쓰기 작업은 거의 순간적이며 캐시 및 세션 관리에 적합합니다. 2) 유연성 : 복잡한 데이터 처리에 적합한 문자열, 목록, 컬렉션 등과 같은 여러 데이터 구조를 지원합니다. 3) 데이터 구조 지원 : 다양한 비즈니스 요구에 적합한 문자열, 목록, 컬렉션, 해시 테이블 등을 제공합니다.

REDIS : 기본 기능을 식별합니다REDIS : 기본 기능을 식별합니다Apr 12, 2025 am 12:01 AM

Redis의 핵심 기능은 고성능 인 메모리 데이터 저장 및 처리 시스템입니다. 1) 고속 데이터 액세스 : Redis는 메모리에 데이터를 저장하고 마이크로 초 수준 읽기 및 쓰기 속도를 제공합니다. 2) 풍부한 데이터 구조 : 문자열, 목록, 컬렉션 등을 지원하며 다양한 응용 프로그램 시나리오에 적응합니다. 3) 지속성 : RDB 및 AOF를 통해 디스크에 데이터를 지속하십시오. 4) 구독 게시 : 메시지 대기열 또는 실시간 통신 시스템에서 사용할 수 있습니다.

Redis : 인기있는 데이터 구조에 대한 안내서Redis : 인기있는 데이터 구조에 대한 안내서Apr 11, 2025 am 12:04 AM

Redis는 다음을 포함하여 다양한 데이터 구조를 지원합니다. 1. String, 단일 값 데이터 저장에 적합합니다. 2. 큐 및 스택에 적합한 목록; 3. 비면성 데이터 저장에 사용되는 세트; 4. 순서, 순위 목록 및 우선 순위 대기열에 적합한 순서 세트; 5. 해시 테이블, 객체 또는 구조화 된 데이터를 저장하는 데 적합합니다.

Redis 카운터를 구현하는 방법Redis 카운터를 구현하는 방법Apr 10, 2025 pm 10:21 PM

Redis Counter는 Redis Key-Value Pair 스토리지를 사용하여 다음 단계를 포함하여 계산 작업을 구현하는 메커니즘입니다. 카운터 키 생성, 카운트 증가, 카운트 감소, 카운트 재설정 및 카운트 얻기. Redis 카운터의 장점에는 빠른 속도, 높은 동시성, 내구성 및 단순성 및 사용 편의성이 포함됩니다. 사용자 액세스 계산, 실시간 메트릭 추적, 게임 점수 및 순위 및 주문 처리 계산과 같은 시나리오에서 사용할 수 있습니다.

See all articles

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

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기