redis 는 비트 맵 을 통 해 온라인 사용자 의 상 태 를 상세 하 게 기록 합 니 다.

머리말
오늘 의 주제 에 들 어가 기 전에 레 디 스 의 비트 맵 이 무엇 인지 간단히 설명해 보 자.Redis 공식 문서 의 비트 맵 에 대한 소 개 는 다음 과 같다.
비트 맵 은 실제 데이터 형식 이 아니 라 문자열 형식 에서 위 치 를 향 한 작업 의 집합 을 정의 합 니 다.문자열 형식 은 바 이 너 리 안전 한 바 이 너 리 대상 이 고 최대 길 이 는 512 MB 이기 때문에 2^32 개의 다른 위 치 를 설정 하 는 데 적합 합 니 다.
비트 작업 은 두 그룹 으로 나 뉜 다.상수 시간 에 한 비트 를 1 또는 0 으로 설정 하거나 이 비트 의 값 을 가 져 오 는 것 과 같다.지정 한 범위 의 위치 설정 수량 을 계산 하 는 등 그룹 위치 에 대한 작업
비트 맵 의 가장 큰 장점 은 때때로 매우 현저 한 공간 을 절약 하여 정 보 를 저장 하 는 방식 이다.예 를 들 어 한 시스템 에서 서로 다른 사용 자 는 증가 하 는 사용자 ID 로 표시 되 고 512 MB 의 메모리 로 400 만 사용자 의 단일 비트 정 보 를 표시 할 수 있다(예 를 들 어 메 시 지 를 받 아야 하 는 지 여부).
요컨대 비트 맵 조작 은 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트왜 메모리 공간 을 절약 할 수 있 습 니까?만약 에 우리 가 100 만 명의 사용자 의 로그 인 상 태 를 저장 해 야 한다 면 비트 맵 을 사용 하면 최소 100 만 개의 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트 비트문자열'0'은 로그 인하 지 않 았 음 을 표시 합 니 다)을 value 로 저장 하려 면 100 만 개의 문자열 을 저장 해 야 합 니 다.이에 비해 비트 맵 으로 저장 하 는 공간 이 훨씬 작 습 니 다.이것 이 비트 맵 저장 의 장점 입 니 다.
요 며칠 동안 업무 중 에 케이스 를 만 났 는데 바로 자신 이 IM 온라인 사용자 상태의 기록 을 실현 해 야 한 다 는 것 입 니 다.그 당시 에 실현 방식 을 많이 찾 았 는데 오늘 공유 하 겠 습 니 다.
주요 사상
비트 맵 을 만 듭 니 다.그 안에 저 장 된 것 은 바 이 너 리 데이터 입 니 다.예 를 들 어 0,1,0,1 은 userId 가 대응 하 는 위치 에 있 는 0 과 1 을 수정 하여 사용자 의 온라인 상 태 를 수정 합 니 다.기본 값 이 0 이기 때문에 1 은 사용자 가 온라인 상태 에 있 고 0 은 사용자 가 오프라인 상태 에 있 음 을 의미 합 니 다.그림 참조:

몬,이 스,웹 세 개의 비트 맵 을 만 들 었 습 니 다.
Mon,These,Web 세 개의 비트 맵 을 구 축 했 습 니 다.Mon 에 게 userId=1 의 사용 자 는 온라인 상태 이 고 userId=2 의 사용 자 는 오프라인 상태 이 며 userId=3 의 사용 자 는 온라인 상태 입 니 다.userId=10 의 사용자 가 접속 하면 10 위의 상 가 를 1 로 바 꿉 니 다.
공간 예측
바 이 너 리 데이터 1 비트 가 1bit 입 니 다.
1 메가바이트(gb)=8589934592 비트(bit)
이론 적 으로 1G 의 메모 리 는 85 억 여 명의 사용자 상 태 를 기록 할 수 있다.만약 에 userId 가 연결 되 지 않 으 면 어떤 userId 의 자릿수 가 85 억 위 를 넘 으 면 일부 알고리즘 을 사용 하거나 userId 를 비트 별로 나 누 어 해결 할 수 있다.
사용 명령
setbit key offset value 수정 key 에서 offset 비트 의 값 은 value 입 니 다.

Setbit
getbit key offset 키 의 첫 번 째 offset 비트 의 value 가 져 오기

getbit
bitcount key 통계 key 중 1 의 개수

bitcount
bitop op destkey key 1 key 2.............................................................................
명령 의 주요 역할 은 key 1,key 2.등 바 이 너 리 데 이 터 를 위치 에 따라 논리 적 으로 연산 한 결과 destkey 에 지불 하고 setbit 가 없 는 위 치 는 기본 값 0 입 니 다.
밤 을 들다
몬,이 스,웹 세 개의 비트 맵 을 구성 하여 최근 3 일 동안 로그 인 상태의 비트 맵 으로 합 니 다.

몬,이 스,웹 세 개의 비트 맵 을 만 들 었 습 니 다.
첫날
userId=10000,userId=9999,userId=8888 사용자 가 로그 인 했 습 니 다.

setbit mon 10000 1; 
setbit mon 9999 1; 
setbit mon 8888 1; 
첫날 온라인 사용자 수 를 집계 하 다

bitcount mon

세 명의 사용자 가 로그 인 했다.
첫날 세 명의 사용자 가 로그 인 했다.
다음날
userId=9999,userId=7777 사용자 가 로그 인 했 습 니 다.

setbit thus 9999 1; 
setbit thus 7777 1;
userId=7777 사용자 온라인 상태 가 져 오기

getbit thus 7777

7777 사용자 가 로그 인 상태 에 있 음
셋째 날
userId=9999,userId=6666 의 사용자 가 로그 인 했 습 니 다.

setbit web 9999 1;  
setbit web 6666 1;
3 일 동안 로그 인 한 사용자 수 가 져 오기

bitop and resultand mon thus web;

3 일 동안 로그 인 한 사용자 수 가 져 오기
3 일 동안 로그 인 한 사용자 수 가 져 오기

bitop or resultor mon thus web;

3 일 동안 로그 인 한 사용자 수 가 져 오기
redis 는 비트 맵 법 으로 온라인 사용자 의 상 태 를 기록 하 는 것 은 여기까지 입 니 다.여러분 이 교 류 를 하 는 것 을 환영 합 니 다.글 에서 틀린 부분 을 지적 하여 저 는 깊 은 인식 을 가지 게 되 었 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기