티스토리 뷰
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}")
'AI > AI 서비스 개발' 카테고리의 다른 글
[AI 서비스 개발] Redis 다중 키워드 검색(Set & Tag) (1) | 2025.02.17 |
---|---|
[AI 서비스 개발] Windows Redis 설치 및 실행(WSL) (0) | 2025.02.16 |
[AI 서비스 개발] Redis, 디스크, 메모리, I/O 비용 (0) | 2025.02.14 |
[AI 서비스 개발] Crewai input type 에러 (0) | 2025.02.13 |
[AI 서비스 개발] 서비스 배포 전 docker로 배포 환경 테스트해보기, 서비스 배포 후 AWS EC2에서 print문 확인하기 (0) | 2025.02.12 |
- Total
- Today
- Yesterday
- 기초
- Python
- C언어
- 오블완
- 스크랩
- 고득점 Kit
- 습관
- 미라클모닝
- 줄넘기
- Ai
- 프로그래머스
- 실기
- 아침운동
- ChatGPT
- SQL
- 뉴스
- 빅데이터 분석기사
- 티스토리챌린지
- 30분
- 영어회화
- opic
- 운동
- llm
- 다이어트
- 아침
- 경제
- IH
- 오픽
- 갓생
- 루틴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |