데이터 스토리지와 관리는 모든 IT 시스템의 핵심 부분. 이 분야에서 Redis는 그 특유의 성능과 유연성으로 많은 개발자들에게 사랑받고 있다. 알아보자
인-메모리 스토리지: Redis는 모든 데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 제공
디스크 기반 DB보다 훨씬 빠른 성능을 가능하게 함
다양한 데이터 구조 지원: 키-값 스토어를 넘어 리스트, 셋, 해시, 정렬된 셋 등 다양한 데이터 구조를 지원
지속성: 주기적으로 디스크에도 데이터를 저장하여 데이터 손실을 방지
복제 및 확장성: 데이터 복제 및 클러스터링을 지원, 높은 가용성과 확장성을 제공
클러스트링: 여러 노드들을 네트워크상에서 연결하여 하나의 서비스처럼 작동하게 만드는 것
Lua스크립팅: Lua스크립트를 지원하여 서버 측에서 복잡한 작업 수행 가능
local key = KEYS[1]
local value = ARGV[1]
local response = redis.call('SET', key, value)
return response
#Redis 서비스 시작
redis-server
# Redis CLI에 접속
redis-cli
# 키-값 저장
SET mykey "Hello Redis"
# 키로 값 조회
GET mykey
import redis
import json
# Redis 클라이언트 연결 설정
r = redis.Redis(host='localhost', port=6379, db=0)
def get_user_profile(user_id):
# 캐시에서 데이터를 가져옴
data = r.get(f'user_profile:{user_id}')
if data is not None:
# 캐시에 데이터가 있는 경우, JSON 형태로 파싱하여 반환
return json.loads(data)
else:
# 캐시에 데이터가 없는 경우, 데이터베이스에서 조회
# 여기서는 데이터베이스 조회 대신에 임시 데이터를 생성하는 것으로 가정
user_profile = {'id': user_id, 'name': 'John Doe', 'email': 'john@example.com'}
# 데이터베이스 조회 결과를 캐시에 저장
r.setex(f'user_profile:{user_id}', 3600, json.dumps(user_profile)) # 1시간 동안 유효
return user_profile
# 사용 예시
profile = get_user_profile(123)
print(profile)
import redis
# Redis 클라이언트 연결 설정
r = redis.Redis(host='localhost', port=6379, db=0)
def set_session(user_id, session_data):
# 세션 데이터를 Redis에 저장
r.setex(f'session:{user_id}', 1800, session_data) # 30분 동안 유효
def get_session(user_id):
# 세션 데이터를 Redis에서 조회
return r.get(f'session:{user_id}')
# 사용 예시
set_session('user123', 'session_data_here')
session = get_session('user123')
print(session)
import redis
import time
# Redis 클라이언트 연결 설정
r = redis.Redis(host='localhost', port=6379, db=0)
# 메시지 발행자
def publisher():
while True:
# 메시지를 채널에 발행
r.publish('channel', 'Hello Redis!')
time.sleep(1)
# 메시지 구독자
def subscriber():
# 구독할 채널 설정
pubsub = r.pubsub()
pubsub.subscribe('channel')
# 메시지를 받을 때까지 대기
for message in pubsub.listen():
if message['type'] == 'message':
print(f"Received: {message['data']}")
# 사용 예시
# 다른 쓰레드나 프로세스에서 이 함수들을 실행
# publisher()
# subscriber()