최근 Redis 클러스터에서 흥미로운 문제를 발견했습니다. 디버깅과 테스트에 많은 시간을 투자한 후 키 만료를 변경하여 일부 클러스터에서 Redis 메모리 사용량을 25% 줄일 수 있었습니다.
Twitter는 내부적으로 여러 캐싱 서비스를 실행합니다. 그 중 하나가 Redis에 의해 구현되었습니다. Redis 클러스터는 노출 및 참여 데이터, 광고 지출 횟수, 다이렉트 메시지 등 몇 가지 중요한 Twitter 사용 사례 데이터를 저장합니다.推荐 문제 배경 school习 (권장 학습:
Redis 비디오 튜토리얼) 2016년 초에 Twitter의 캐시 팀은 Redis 클러스터의 아키텍처를 업데이트했습니다. Redis 버전 2.4에서 버전 3.2로의 업데이트를 포함하여 Redis에 일부 변경 사항이 있었습니다. 이 업데이트 이후 사용자가 예상했거나 사용할 준비가 된 것과 일치하지 않는 메모리 사용량이 나타나기 시작하고, 대기 시간이 증가하고, 주요 삭제 문제가 발생하는 등 몇 가지 문제가 나타났습니다. 키 정리는 큰 문제로, 지속되어야 하는 데이터가 삭제되거나, 데이터가 있던 원래 저장소로 요청이 전송될 수 있습니다.
사전 조사해당 팀과 캐싱팀은 사전 조사에 착수했습니다. 현재 진행 중인 키 삭제와 관련하여 대기 시간이 증가하는 것을 확인하고 있습니다. Redis가 쓰기 요청을 받았지만 쓰기를 보관할 메모리가 없으면 수행 중인 작업을 중지하고 키를 지운 다음 새 키를 저장합니다. 그러나 새로 지워진 메모리 사용량 증가의 원인이 무엇인지 알아내야 합니다.
메모리가 만료되었지만 아직 삭제되지 않은 키로 가득 찬 것으로 의심됩니다. 어떤 사람들은 스캔 방법을 사용하여 모든 키를 읽고 만료된 키를 삭제할 것을 제안합니다.
Redis에서 키에는 활성 만료와 수동 만료라는 두 가지 만료 방법이 있습니다. 스캔은 키의 수동 만료를 트리거합니다. TTL이 만료되면 TTL이 삭제되고 아무것도 반환되지 않습니다.Redis 문서에서는 버전 3.2의 활성 키 만료에 대해 설명합니다. 키의 활성 만료는 activeExpireCycle이라는 함수로 시작됩니다. cron이라는 내부 타이머에서 초당 여러 번 실행됩니다. activeExpireCycle 함수가 하는 일은 각 키 공간을 반복하고, TTL 세트로 임의의 kry를 확인하고, 만료된 kry의 백분율 임계값이 충족되면 시간 제한이 충족될 때까지 이 프로세스를 반복하는 것입니다.
모든 krys를 스캔하는 이 방법은 효과적이며 스캔이 완료되면 메모리 사용량도 감소합니다. Redis는 더 이상 효과적으로 키를 만료시키지 않는 것 같습니다.
그러나 당시의 해결책은 클러스터 크기와 하드웨어를 늘려 키가 더 많이 분산되고 사용 가능한 메모리가 더 많아지는 것이었습니다. 이는 앞서 언급한 Redis 업그레이드 프로젝트가 이러한 클러스터를 보다 효율적으로 만들어 실행하는 데 드는 크기와 비용을 줄이기 때문에 실망스럽습니다.
Redis 관련 기술 기사를 더 보려면
Redis 데이터베이스 사용 튜토리얼 소개칼럼을 방문하여 알아보세요!
위 내용은 Redis 키가 만료된 후에도 여전히 존재합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!