Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Redis를 통한 인메모리 캐싱 마스터하기:빠르고 안정적인 데이터 검색

Redis를 통한 인메모리 캐싱 마스터하기:빠르고 안정적인 데이터 검색

빠르게 응답해야 하는 웹 앱이나 API를 구축할 때 캐싱이 비법인 경우가 많습니다.

이것이 없으면 서버는 데이터베이스, 타사 API 또는 느린 스토리지 시스템에서 동일한 데이터를 계속해서 가져오는 데 시간을 낭비할 수 있습니다.

그러나 해당 데이터를 메모리에 저장하면 동일한 정보가 밀리초 내에 제공될 수 있습니다. 이것이 바로 Redis가 필요한 이유입니다.

Redis는 데이터를 RAM에 저장하고 즉시 검색할 수 있는 빠르고 유연한 도구입니다. 대시보드 구축, 소셜 미디어 게시물 자동화, 사용자 세션 관리 등 무엇을 하든 Redis를 사용하면 시스템을 더 빠르고 효율적이며 쉽게 확장할 수 있습니다.

이 기사에서는 인메모리 캐싱이 작동하는 방식과 많은 개발자가 Redis를 선택하는 이유에 대해 알아봅니다.

목차

  • 인메모리 캐싱이란 무엇입니까?

  • Redis란 무엇입니까?

  • Redis로 작업하는 방법

    • 레디스 설치

    • Redis 데이터 유형

    • Python을 사용한 Redis

  • 실제 사용 사례

  • 결론

인메모리 캐싱이란 무엇입니까?

인메모리 캐싱은 필요할 때마다 데이터베이스나 외부 소스에서 데이터를 가져오는 대신 시스템의 RAM에 데이터를 저장하는 방법입니다.

RAM은 디스크 스토리지에 비해 엄청나게 빠르기 때문에 캐시된 데이터에 거의 즉시 액세스할 수 있습니다. 이 접근 방식은 API 응답, 사용자 프로필 또는 렌더링된 HTML 페이지와 같이 자주 변경되지 않는 정보에 적합합니다.

동일한 쿼리나 API 호출을 반복적으로 실행하는 대신 앱은 캐시를 먼저 확인합니다. 데이터가 있으면 즉시 사용됩니다. 그렇지 않은 경우 소스에서 가져와서 캐시에 저장한 다음 반환합니다.

이 기술은 백엔드의 로드를 줄이고, 응답 시간을 개선하며, 트래픽이 많은 상황에서 앱 성능을 크게 향상시킬 수 있습니다.

Redis란 무엇인가요?

Redis는 개발자가 실시간으로 데이터를 캐시하고 관리하는 데 사용하는 오픈 소스 인메모리 데이터 저장소입니다.

기존 데이터베이스와 달리 Redis는 모든 것을 메모리에 저장하므로 데이터 검색 속도가 놀라울 정도로 빠릅니다. 하지만 Redis는 단순한 키-값 저장소가 아닙니다. 문자열과 목록부터 집합, 해시, 정렬된 집합까지 광범위한 데이터 유형을 제공합니다.

Redis는 게시/구독 메시징, 스트림, 지리공간 쿼리와 같은 고급 작업도 처리할 수 있습니다. 강력한 성능에도 불구하고 Redis는 가볍고 시작하기 쉽습니다.

로컬 시스템에서 실행하거나, 서버에 배포하거나, 클라우드 공급자가 제공하는 관리형 Redis 서비스를 사용할 수도 있습니다. 주요 기업의 신뢰를 받고 있으며 캐싱 및 세션 저장부터 실시간 분석 및 작업 대기열에 이르기까지 모든 종류의 애플리케이션에서 사용됩니다.

Redis로 작업하는 방법

Redis 설치

Redis를 시작하고 실행하는 것은 놀라울 정도로 간단합니다. 설명서에서 운영 체제에 따른 설치 지침을 찾을 수 있습니다.

Redis가 작동하는지 확인하려면 다음을 실행하세요.

redis-cli ping
# Should respond with "PONG"

Redis 데이터 유형

Redis는 유연한 방식으로 데이터를 저장하고 관리할 수 있는 여러 기본 제공 유형을 제공합니다.

문자열 :단순 키 ⇔ 값 쌍.

SET username "Emily"
GET username

목록 :대기열과 타임라인에 적합한 정렬된 컬렉션입니다.

LPUSH tasks "task1"
RPUSH tasks "task2"
LRANGE tasks 0 -1

해시 :JSON 객체와 마찬가지로 사용자 프로필에 적합합니다.

HSET user:1 name "Alice"
HSET user:1 email "alice@example.com"
HGETALL user:1

세트 :순서가 지정되지 않은 컬렉션으로 태그나 고유 항목에 적합합니다.

SADD tags "python"
SADD tags "redis"
SMEMBERS tags

정렬된 세트 :점수가 포함된 세트 - 순위표에 유용합니다.

ZADD leaderboard 100 "Bob"
ZADD leaderboard 200 "Carol"
ZRANGE leaderboard 0 -1 WITHSCORES

Redis는 또한 비트맵, 하이퍼로그로그, 스트림, 지리공간 인덱스를 지원하고 데이터 구조에 대한 지원을 계속 확장하고 있습니다.

Python을 사용한 Redis

Python으로 작업하는 경우 Redis를 사용하는 것도 마찬가지로 쉽습니다. redis 설치 후 pip install redis를 사용하는 Python 라이브러리 , Redis 서버에 연결하여 바로 키 설정 및 가져오기를 시작할 수 있습니다.

다음은 Redis에서 작동하는 몇 가지 간단한 Python 코드입니다:

import redis
# Connect to the local Redis server on default port 6379 and use database 0
r = redis.Redis(host='localhost', port=6379, db=0)
# --- Basic String Example ---
# Set a key called 'welcome' with a string value
r.set('welcome', 'Hello, Redis!')
# Get the value of the key 'welcome'
# Output will be a byte string: b'Hello, Redis!'
print(r.get('welcome'))
# --- Hash Example (like a Python dict) ---
# Create a Redis hash under the key 'user:1'
# This hash stores fields 'name' and 'email' for a user
r.hset('user:1', mapping={
 'name': 'Alice',
 'email': 'alice@example.com'
})
# Get all fields and values in the hash as a dictionary of byte strings
# Output: {b'name': b'Alice', b'email': b'alice@example.com'}
print(r.hgetall('user:1'))
# --- List Example (acts like a queue or stack) ---
# Push 'Task A' to the left of the list 'tasks'
r.lpush('tasks', 'Task A')
# Push 'Task B' to the left of the list 'tasks' (it becomes the first item)
r.lpush('tasks', 'Task B')
# Retrieve all elements from the list 'tasks' (from index 0 to -1, meaning the full list)
# Output: [b'Task B', b'Task A']
print(r.lrange('tasks', 0, -1))

사용자의 세션 데이터를 저장하고, 백그라운드 작업을 대기열에 추가하거나 렌더링된 HTML 페이지를 캐시할 수도 있습니다. Redis 명령은 빠르고 원자적이므로 트래픽이 많은 환경에서 데이터 충돌이나 불일치에 대해 걱정할 필요가 없습니다.

Redis의 가장 유용한 기능 중 하나는 키 만료입니다. Redis에게 특정 기간이 지나면 자동으로 키를 삭제하도록 지시할 수 있는데, 이는 세션 데이터나 임시 캐시에 특히 유용합니다.

키에 TTL(Time-To-Live)을 설정하면 Redis가 키를 자동으로 제거합니다.

SET session:1234 "some data" EX 3600 # Expires in 1 hour

Redis는 지속성도 지원하므로 인메모리 저장소이더라도 재부팅 후에도 데이터가 유지됩니다.

Redis는 소규모 앱에만 국한되지 않습니다. 복제, 클러스터링, Sentinel을 통해 쉽게 확장됩니다.

복제를 사용하면 데이터의 읽기 전용 복사본을 생성할 수 있어 로드 분산에 도움이 됩니다. 클러스터링은 데이터를 여러 조각으로 나누어 여러 서버에 분산시킵니다. 그리고 Sentinel은 자동 장애 조치를 처리하여 서버 하나가 다운되더라도 시스템이 계속 실행되도록 합니다.

실제 사용 사례

Redis의 가장 일반적인 용도 중 하나는 API 응답을 캐싱하는 것입니다.

날씨 데이터를 표시하는 앱이 있다고 가정해 보겠습니다. 사용자가 페이지를 로드할 때마다 날씨 API를 호출하는 대신 Redis의 각 도시에 대한 응답을 5~10분 동안 캐시할 수 있습니다. 이렇게 하면 가끔씩만 새 데이터를 가져오며 앱 실행 속도가 훨씬 빨라지고 저렴해집니다.

또 다른 강력한 사용 사례는 세션 관리입니다. 웹 애플리케이션에서 로그인한 모든 사용자에게는 자신이 누구인지, 무엇을 하고 있는지 추적하는 세션이 있습니다. Redis는 빠르고 임시적이기 때문에 이 세션 데이터를 저장하기에 좋은 장소입니다.

세션 ID를 사용자 정보와 함께 키로 저장할 수 있습니다. 만료 시간을 추가하면 자동 세션 시간 초과 기능이 내장되어 있습니다. Redis는 매우 빠르고 동시성 액세스를 지원하므로 수천 명의 사용자가 동시에 로그인하는 애플리케이션에 매우 적합합니다.

결론

인 메모리 캐싱은 앱 속도를 높이는 가장 간단하고 효과적인 방법 중 하나이며 Redis를 사용하면 이를 놀라울 정도로 쉽게 구현할 수 있습니다. 이는 단순한 캐시가 아니라 빠르고 확장 가능한 실시간 시스템을 구축하기 위한 툴킷입니다. 몇 페이지 또는 API 응답을 캐싱하여 소규모로 시작할 수 있으며, 요구 사항이 증가함에 따라 Redis도 함께 성장합니다.

이제 막 시작했다면 Redis를 로컬에서 실행하고 다양한 데이터 유형을 실험해 보세요. 일부 문자열을 저장하고, 목록으로 간단한 작업 대기열을 구축하거나, 정렬된 세트로 사용자 점수를 추적하세요. 더 많이 탐색할수록 Redis가 애플리케이션을 더 빠르고, 스마트하고, 효율적으로 실행하는 데 어떻게 도움이 되는지 더 많이 알게 될 것입니다.

이 기사가 마음에 드셨나요? Linkedin에서 나와 연결하세요. 곧 다른 주제로 뵙겠습니다.

무료로 코딩을 배우세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 시작하세요