티스토리 뷰

1. Redis와 키워드로 장소 찾기

- 예: 홍대에 있는 조용한 카페 정보를 저장하고 싶을 때,

1) 장소 정보(카페 이름, 위치 등)

2) 카페 관련 키워드 (홍대, 조용한 카페, 데이트 장소 등)

 

2. 어떻게 저장할까?

- Redis에 키워드를 여러 개 저장해서, 조건에 맞는 카페를 쉽게 찾아낼 수 있다.

- 구현 예시: 카페A를 "홍대", "조용한 카페", "데이트 장소" 키워드와 연결해 등록, "홍대"키워드로 저장된 카페를 찾음

import redis
import json

# Redis 연결
redis_client = redis.Redis(host="localhost", port=6379, db=0)

# 카페 정보를 저장하는 함수
def save_place_with_keywords(place_name, place_info, keywords):
    # 장소 정보 저장 (예: 카페 A)
    place_key = f"place:{place_name}"
    redis_client.set(place_key, json.dumps(place_info))

    # 키워드마다 장소를 추가
    for keyword in keywords:
        keyword_key = f"keyword:{keyword}"
        redis_client.sadd(keyword_key, place_key)

# 카페 정보
place_info = {
    "name": "카페 A",
    "address": "홍대",
    "rating": 4.5
}

# 키워드
keywords = ["홍대", "조용한 카페", "데이트 장소", "분위기 좋은", "디저트 맛있는"]

# 카페 저장
save_place_with_keywords("카페 A", place_info, keywords)

# 키워드로 카페 찾기
def get_places_by_keyword(keyword):
    keyword_key = f"keyword:{keyword}"
    place_keys = redis_client.smembers(keyword_key)
    places = [json.loads(redis_client.get(place_key)) for place_key in place_keys]
    return places

# "홍대"와 관련된 카페 찾기
print(get_places_by_keyword("홍대"))

 

1) host="localhost"

- Redis 서버가 현재 컴퓨터에 설치되어 있다는 뜻

- 다른 컴퓨터나 서버에 설치된 Redis를 사용하려면, 해당 서버의  IP 주소나 도메인을 여기에 입력해야 한다.

- 예: host="192,168.1.100" 또는 host="my-redis-server.com"

 

2) port=6379

- Redis의 기본 포트 번호: 6379

- 만약 Redis 서버가 다른 포트에서 실행되고 있으면, 그 포트 번호를 입력

 

3) db=0

- Redis는 여러 개의 데이터베이스를 사용할 수 있다.

- 기본적으로 db=0은 첫 번째 데이터베이스를 의미한다.

- Redis는 기본적으로 16개의 데이터베이스를 지원하는데, 번호가 0부터 시작한다. (db=1은 두 번째 데이터베이스)

 

3. Redis는 어디에 서장하면 좋을까?

- AWS EC2에서 백엔드 서버를 운영하고 있고, AWS RDS에서 MySQL을 사용 중이라면, Redis는 EC2 인스턴스에 설치하는 것이 일반적이다.

- 백엔드 서버와 Redis가 같은 서버에 있으면, 빠른 통신이 가능하고 네트워크 지연을 최소화 할 수 있기 때문

- RDS는 데이터베이스로, 영속적인 데이터를 저장한다. 

 

4. Redis 구현 방법

1) Redis 연결

import redis

# Redis 연결
redis_client = redis.Redis(host="localhost", port=6379, db=0)

2-1) 캐시 데이터 저장(TTL 설정, TTL: Time to Live, 데이터가 Redis에 저장된 후 얼마나 오래 유지될지를 설정하는 시간 )

# 캐시 데이터 저장 (TTL 설정)
redis_client.setex("user:1234", 3600, "user_data")  # 1시간(3600초) 동안 유효

2-2) 캐시 데이터 읽기

# 캐시 데이터 읽기
cached_data = redis_client.get("user:1234")
if cached_data:
    print("캐시에서 데이터 읽기:", cached_data)
else:
    print("캐시 미스 발생, 데이터베이스 조회 필요")

3-1) 세션 정보 저장

import redis
import json

# Redis 연결
redis_client = redis.Redis(host="localhost", port=6379, db=0)

# 세션 정보 저장 (예: 로그인한 사용자)
session_data = {
    "user_id": 1234,
    "user_name": "John Doe",
    "logged_in": True
}

3-2) 세션 저장

# 세션 저장 (TTL 1시간)
redis_client.setex("session:user_1234", 3600, json.dumps(session_data))

3-3) 세션 정보 읽기

# 세션 정보 읽기
session_info = redis_client.get("session:user_1234")
if session_info:
    session_data = json.loads(session_info)
    print("세션 정보:", session_data)
else:
    print("세션 만료 또는 없음")

4-1) 작업을 큐에 저장

* 메모리 큐를 언제 쓸까? 작업을 처리할 때, 작업을 순차적으로 실행해야 할떄, 작업의 순서와 처리 상태를 관리해야 할 때

- 먼저 온 것부터 처리하는FIFO 방식(대기열 형태로 사용)

- 작업의 순차적 처리(배치 작업이나 백그라운드 작업을 실행할 때), 비동기 작업 처리, 분산 시스템에서 작업분배 등

import redis

# Redis 연결
redis_client = redis.Redis(host="localhost", port=6379, db=0)

# 작업을 큐에 추가 (List 자료구조 사용)
redis_client.rpush("task_queue", "task1")
redis_client.rpush("task_queue", "task2")

4-2) 큐에서 작업을 꺼내기(작업 처리)

# 큐에서 작업을 꺼내기 (작업 처리)
task = redis_client.lpop("task_queue")
print(f"처리할 작업: {task}")

4-3) 큐에 남은 작업

# 큐에 남은 작업
remaining_tasks = redis_client.lrange("task_queue", 0, -1)
print(f"남은 작업들: {remaining_tasks}")
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함