Redis에서 Big Key 문제를 해결하는 방법
1. 빅키란?
간단히 말하면 특정 키에 해당하는 값이 매우 크고 Redis 공간을 많이 차지한다는 의미로 본질적으로 큰 값 문제입니다. 키는 프로그램 자체에서 설정할 수 있는 경우가 많고, 값은 프로그램에서 제어할 수 없는 경우가 많아 값이 매우 클 수 있습니다.
redis에서 이러한 Big Key에 해당하는 값은 매우 크고 직렬화/역직렬화 과정에서 많은 시간이 소요되므로 일반적으로 Big Key를 조작할 때 시간이 많이 걸리므로 Redis가 차단될 수 있습니다. . 따라서 Redis 성능이 저하됩니다.
몇 가지 실제 예를 사용하여 대형 키의 특성을 설명합니다.
● 문자열 유형의 키, 해당 값은 5MB(데이터가 너무 큼)
● 목록 유형의 키, 목록 수는 20,000개입니다. (목록이 너무 많음);
● 멤버가 10,000개인 ZSet 유형 키(멤버가 너무 많음)
● 멤버가 1,000명에 불과한 해시 형식 키이지만 이 멤버의 총 값 크기는 100MB입니다(멤버 크기가 너무 큼). );
실제 비즈니스에서는 대규모 키의 결정은 여전히 Redis의 실제 사용 시나리오와 비즈니스 시나리오를 기반으로 종합적으로 판단해야 합니다. 일반적으로 데이터의 크기와 구성원 수로 판단됩니다.
2. 빅키가 발생하는 장면?
1. Redis 데이터 구조의 부적절한 사용
성능에 적합하지 않은 시나리오에서 Redis를 사용하면 문자열 유형 키를 사용하여 대용량 바이너리 파일 데이터를 저장하는 등 키 값이 너무 커집니다.
2. 정크 데이터를 제때 정리하지 못함
유효하지 않은 데이터를 정기적으로 정리하지 못하여 HASH형 키의 구성원 수가 계속 늘어나고 있습니다. 어떠한 삭제 메커니즘도 없이 계속해서 데이터를 받기만 하기 때문에 가치는 무한히 증가할 것입니다.
3. 부정확한 사업추정
사업 개시 전 기획 및 설계에 대한 고려가 부족하였고, Key 내 구성원이 합리적으로 분할되지 않아 개별 Key 내 구성원이 너무 많아졌습니다.
4. 유명인과 인터넷 유명인의 팬 목록, 특정 핫뉴스에 대한 댓글 목록
특정 유명인/인터넷 유명인의 팬을 저장하기 위해 List 데이터 구조를 사용한다고 가정해 보겠습니다. 팬 수가 많기 때문에 핫 뉴스에 대한 댓글 목록 핫 뉴스에는 클릭률과 댓글이 많기 때문에 목록 컬렉션에 많은 요소가 저장되므로 값이 너무 높아질 수 있습니다. 커서 Big Key 문제가 발생합니다.
3. 빅키의 위험성은 무엇인가요?
1. 요청 차단
빅 키에 해당하는 값이 상대적으로 커서 읽고 쓸 때 시간이 오래 걸려 후속 요청 처리가 차단될 수 있습니다. Redis의 핵심 스레드는 단일 스레드이므로 모든 요청이 순차적으로 처리됩니다. 이전 요청이 완료되지 않으면 후속 요청이 처리되지 않습니다.
2. 메모리 증가
빅키를 읽는 데 소모되는 메모리가 일반 키보다 커질 경우 OOM(메모리 오버플로)이 발생하거나 최대 메모리 maxmemory 설정 값에 도달할 수 있습니다. of redis 쓰기 차단 또는 중요한 키가 제거됩니다.
3. 차단된 네트워크
큰 단일 값을 읽으면 서버 네트워크 카드의 더 많은 대역폭을 차지하고 속도가 느려지며 서버의 다른 Redis 인스턴스 또는 애플리케이션에 영향을 미칠 수 있습니다.
4. 마스터-슬레이브 동기화 및 마스터-슬레이브 전환에 미치는 영향
큰 키를 삭제하면 메인 라이브러리가 오랫동안 차단되어 동기화가 중단되거나 마스터-슬레이브 전환이 발생합니다.
4. 빅키를 식별하는 방법은 무엇인가요?
1. redis와 함께 제공되는 명령 식별을 사용하세요
예를 들어 공식 Redis 클라이언트 redis-cli와 --bigkeys 매개변수를 사용하여 특정 인스턴스의 5가지 데이터 유형(문자열, 해시, list, set, zset)의 최대 키입니다.
서비스를 차단하지 않고 온라인으로 스캔할 수 있다는 장점이 있고, 정보가 적고 내용이 정확하지 않다는 단점이 있습니다.
2. 디버그 개체 키 명령
을 사용하여 들어오는 개체(키 이름)에 따라 키를 분석하고 대량의 데이터를 반환합니다. serializedlength의 값은 키의 직렬화된 길이입니다. 키의 직렬화된 길이는 메모리 공간의 실제 길이와 동일하지 않습니다. 또한 디버그 개체는 실행 비용이 많이 드는 디버깅 명령이며 실행 중일 때 다른 요청이 입력됩니다. Redis는 실행될 때까지 차단됩니다. 그리고 한 번에 하나의 키에 대한 정보만 확인할 수 있으므로 공식적으로 권장하지는 않습니다.
3. redis-rdb-tools 오픈 소스 도구
이 방법은 redis 인스턴스에서 bgsave를 실행하는 것입니다. bgsave는 redis의 스냅샷 백업을 트리거하고, rdb 지속성 파일을 생성한 다음, 덤프된 rdb 파일을 분석합니다. 큰 열쇠를 찾아보세요.
얻은 핵심 정보가 상세하고, 선택적 매개변수가 많으며, 맞춤형 요구 사항을 지원한다는 장점이 있으며, 결과 정보를 json 또는 csv 형식으로 선택할 수 있으며, 후속 처리가 오프라인이 필요하다는 단점이 있습니다. 작업을 수행하고 결과를 얻는 데 오랜 시간이 걸립니다.
5. Big Key 문제를 해결하는 방법은 무엇입니까?
Big Key 문제를 해결하려면 키에 해당하는 값의 크기를 줄이는 것, 즉 String 데이터 구조의 경우 List, Hash, Set에 대해 저장된 문자열의 길이를 줄이는 것뿐입니다. 및 ZSet 데이터 구조를 사용하여 집합의 요소 수를 줄입니다.
1. 큰 키를 분할하세요
큰 키를 키-값과 같은 여러 개의 작은 키로 분할하고 각 키의 수나 크기가 합리적인 범위 내에 있는지 확인한 다음 다른 키를 가져오거나 mget을 사용하여 일괄적으로 가져오는 방식으로 저장합니다.
2. 큰 키를 정리하세요
Redis에서 큰 키를 정리하고 Redis에서 해당 데이터를 삭제하세요. Redis는 4.0부터 UNLINK 명령을 제공했습니다. 이 명령은 들어오는 키를 비차단 방식으로 천천히 그리고 점진적으로 정리할 수 있으며 UNLINK를 통해 큰 키나 초대형 키도 안전하게 삭제할 수 있습니다.
3. Redis의 메모리, 네트워크 대역폭, 시간 초과 및 기타 지표를 모니터링합니다.
시스템을 모니터링하고 합리적인 Redis 메모리 경보 임계값을 설정하여 현재 Redis 메모리와 같은 큰 키가 생성될 수 있음을 알려줍니다. 사용량이 70%를 초과하고, Redis 메모리의 증가율이 1시간 이내에 20%를 초과하는 등.
4. 유효하지 않은 데이터를 정기적으로 정리합니다
특정 Key가 증분 방식으로 많은 양의 데이터를 기록했지만 데이터의 적시성을 무시한 경우 대량의 유효하지 않은 데이터가 축적됩니다. 잘못된 데이터는 예약된 작업을 통해 정리할 수 있습니다.
5. 값 압축
직렬화 및 압축 알고리즘을 사용하여 키 크기를 제어하지만 직렬화와 역직렬화 모두 특정 성능 소모를 유발한다는 점에 유의해야 합니다. 압축 후에도 값이 여전히 매우 큰 경우 키를 추가로 분할하는 것을 고려할 수 있습니다.
보충 지식: 키 디자인
(1) [권장 사항]: 가독성 및 관리 용이성
회사 이름(또는 데이터베이스 이름)을 앞에 붙이고(키 충돌을 방지하기 위해) 회사 이름과 같이 콜론으로 구분합니다. 테이블 이름: id
o2o: order:1
(2) [제안]: Simplicity
의미를 보장하면서 키 길이를 제어하세요. 키가 많은 경우 메모리 사용량을 무시할 수 없습니다. 예:
user:{uid}:friends:messages:{mid}는 u:{uid}m:{mid}
(3)으로 단순화됩니다. [필수]: 특수 문자를 포함하지 마세요
카운터 예: 공백 포함 , 개행, 단일 문자 큰따옴표 및 기타 이스케이프 문자
위 내용은 Redis에서 Big Key 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

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

Redis를 사용하여 잠금 작업을 사용하려면 SetNX 명령을 통해 잠금을 얻은 다음 만료 명령을 사용하여 만료 시간을 설정해야합니다. 특정 단계는 다음과 같습니다. (1) SETNX 명령을 사용하여 키 값 쌍을 설정하십시오. (2) 만료 명령을 사용하여 잠금의 만료 시간을 설정하십시오. (3) DEL 명령을 사용하여 잠금이 더 이상 필요하지 않은 경우 잠금을 삭제하십시오.

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

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

REDIS 데이터 손실 원인에는 메모리 실패, 정전, 인간 오류 및 하드웨어 고장이 포함됩니다. 솔루션은 다음과 같습니다. 1. RDB 또는 AOF 지속성을 사용하여 디스크에 데이터를 저장합니다. 2. 고 가용성을 위해 여러 서버에 복사하십시오. 3. Redis Sentinel 또는 Redis 클러스터를 사용한 Ha; 4. 데이터를 백업 할 스냅 샷을 만듭니다. 5. 지속성, 복제, 스냅 샷, 모니터링 및 보안 조치와 같은 모범 사례를 구현합니다.

Redis Command Line 도구 (Redis-Cli)를 사용하여 다음 단계를 통해 Redis를 관리하고 작동하십시오. 서버에 연결하고 주소와 포트를 지정하십시오. 명령 이름과 매개 변수를 사용하여 서버에 명령을 보냅니다. 도움말 명령을 사용하여 특정 명령에 대한 도움말 정보를 봅니다. 종금 명령을 사용하여 명령 줄 도구를 종료하십시오.
