>  기사  >  데이터 베이스  >  Redis 캐시를 사용해야 하는 경우

Redis 캐시를 사용해야 하는 경우

(*-*)浩
(*-*)浩원래의
2019-11-22 11:54:373267검색

Redis 캐시를 사용해야 하는 경우

Redis는 어떤 문제를 해결하나요?

데이터의 대규모 읽기 및 쓰기와 데이터베이스 읽기 및 쓰기 기능의 모순                                                                              > 보기 캐시는 원래 마더보드 캐시에서 현재 레벨 3 캐시로 성장했으며, 캐시 크기도 계속해서 성장해 왔습니다. 인터넷 데이터에 따르면 CPU 캐시 적중률은 약 80%입니다.

컴퓨터가 발전하면서 CPU와 메모리의 모순에 비유하자면, 대형 웹사이트에서 대용량 데이터를 읽고 쓰는 것과 데이터베이스를 읽고 쓰는 능력의 모순이 이 모순과 유사하다는 것을 알 수 있습니다. 또한 데이터베이스와 애플리케이션 사이에 데이터베이스보다 빠른 저장 영역인 캐시를 구축할 수도 있습니다.

Redis를 캐시로 사용하는 것은 누구나 가장 잘 알고 있을 것입니다. Redis 작성자가 Redis를 설계한 원래 의도는 관계형 데이터베이스를 사용할 때 아무리 최적화해도 성능이 기대에 미치지 못했기 때문이었습니다. 그래서 그는 메모리 내 데이터베이스를 직접 작성했습니다.

캐시로는 다음과 같은 적용 시나리오가 있습니다.

1. 핫스팟 데이터 예를 들어 SQL 쿼리 결과를 메모리에 저장할 수도 있고, 사용자가 자주 보는 사진을 메모리에 저장할 수도 있습니다.

2. 순위 목록 Redis에서 제공하는 zset 데이터 구조를 기반으로 순위 목록을 보다 편리하게 구현할 수 있습니다. 순위 목록 구현에 대한 자세한 내용은 순위 목록 알고리즘 설계 및 구현 비교를 참조하세요. 소규모 데이터의 경우 순위를 구현하기 위해 Mysql을 사용하는데는 큰 문제가 없으나, 일단 데이터의 양이 늘어나면 계속해서 MySQL을 읽고 쓰기 때문에 병목현상이 발생하게 된다.

3. 카운터/속도 제한기
카운터의 응용 시나리오 중 하나는 사용자의 좋아요 수를 계산하는 것이고, 속도 제한기의 응용 시나리오 중 하나는 사용자 IP의 액세스 횟수를 제한하는 것입니다. Redis를 카운터로 사용할 수 있는 이유는 Redis가 단일 스레드이기 때문에 매번 이전 명령을 실행해야 다음 명령이 실행되기 때문입니다. 이렇게 하면 여러 명령이 동시에 실행되지 않습니다. 즉, 동시성 문제가 발생하지 않습니다. 속도 제한기의 원리는 유사합니다.

4. 상호 친구
Redis에서 제공하는 Set 데이터 구조의 교차 연산 sinter를 사용하면 데이터베이스의 조인 테이블 쿼리를 사용하는 동안 두 Set 컬렉션의 교차점을 더 쉽게 찾을 수 있습니다. 웹사이트 사용자 수가 엄청납니다.

5. 간단한 메시지 대기열
Redis에서 제공하는 게시/구독은 매우 간단한 메시징 시스템입니다. Kafka처럼 서로 다른 토픽과 파티션으로 나누어 지속성을 제공하는 기능은 제공하지 않습니다. Redis의 메시지 큐는 높은 안정성이 필요하지 않은 시나리오에서 사용됩니다.

6. 세션 공유
세션은 사용자가 누구인지 기록하는 데 사용됩니다. 클러스터를 사용하여 애플리케이션을 배포하는 경우 세션을 균일하게 관리할 수 있는 장소가 필요합니다. 세션을 기록하기 위해 데이터베이스를 사용할 수 있지만 현재로서는 데이터베이스에 대한 성능 요구 사항이 더 높습니다. 또한 세션은 일반적으로 시간에 민감합니다. 이 로직을 위해서는 코드로 구현해야 하지만 Redis를 사용하여 세션을 공유하면 그런 문제는 발생하지 않습니다.

위의 많은 응용 프로그램 시나리오는 다른 기술을 사용하여 문제를 해결할 수도 있지만 Redis와 같은 기술은 특정 리소스 제약 조건에서 더 나은 솔루션이 될 것입니다.

더 많은 Redis 관련 기술 기사를 보려면 Redis 데이터베이스 사용 튜토리얼 소개 칼럼을 방문하여 알아보세요!

위 내용은 Redis 캐시를 사용해야 하는 경우의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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