Python을 사용한 Redis 캐시 데이터베이스 조작

Redis 클라이언트 설치 및 기본 설정

Python에서 Redis와 통신하기 위해선 먼저 전용 클라이언트 라이브러리를 설치해야 한다. 다음 명령어를 통해 redis-py 패키지를 설치할 수 있다.

pip install redis

설치 후, Python 코드 내에서 redis 모듈을 불러와 로컬 또는 원격 Redis 서버에 연결할 수 있다. 아래는 기본적인 연결 예제이다.

import redis

# Redis 서버에 연결 (기본값: localhost, 포트 6379, DB 인덱스 0)
conn = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)

decode_responses=True 옵션은 바이트 문자열 대신 자동으로 문자열로 반환되도록 하여 처리를 간편하게 해준다.

문자열(String) 기반 작업

가장 기본적인 데이터 타입인 문자열은 단일 값 저장에 적합하다. 주요 메서드는 다음과 같다.

  • set(key, value): 키에 값을 저장한다. 이미 존재하면 덮어쓴다.
  • get(key): 키에 해당하는 값을 조회한다. 존재하지 않으면 None 반환.
  • mset(mapping): 여러 키-값 쌍을 한 번에 설정.
  • mget(*keys): 여러 키의 값을 리스트 형태로 반환.
  • delete(*keys): 하나 이상의 키를 삭제.

예제:

# 단일 키 설정 및 조회
conn.set("username", "alice")
print(conn.get("username"))  # alice 출력

# 다중 설정 및 조회
conn.mset({"email": "alice@example.com", "age": "30"})
data = conn.mget("username", "email")
print(data)  # ['alice', 'alice@example.com']

# 키 삭제
conn.delete("age")

리스트(List) 조작

Redis의 리스트는 양방향 연결 리스트로, 앞뒤 삽입/삭제가 효율적이다.

  • lpush(key, *values): 리스트의 왼쪽(앞)에 요소 추가.
  • rpush(key, *values): 오른쪽(끝)에 요소 추가.
  • lrange(key, start, end): 지정된 범위의 요소를 가져옴. 전체 리스트는 0, -1로 표현.
  • lpop(key): 리스트의 첫 번째 요소를 제거하고 반환.

예제:

# 리스트 생성 및 요소 추가
conn.lpush("tasks", "task1", "task2", "task3")
print(conn.lrange("tasks", 0, -1))  # ['task3', 'task2', 'task1']

# 첫 번째 항목 추출
first_task = conn.lpop("tasks")
print(first_task)  # task3

세트(Set) 활용

세트는 중복을 허용하지 않는 집합 자료형으로, 멤버십 검사에 최적화되어 있다.

  • sadd(key, *members): 하나 이상의 멤버를 세트에 추가.
  • smembers(key): 세트 내 모든 멤버를 반환.
  • srem(key, *members): 지정된 멤버를 세트에서 제거.

예제:

# 세트에 멤버 추가
conn.sadd("tags", "python", "redis", "cache", "nosql")

# 전체 멤버 조회
all_tags = conn.smembers("tags")
print(all_tags)  # {'python', 'redis', 'cache', 'nosql'}

# 특정 멤버 제거
conn.srem("tags", "nosql")
updated = conn.smembers("tags")
print(updated)  # {'python', 'redis', 'cache'}

해시(Hash) 구조 사용

해시는 필드-값 쌍을 저장하는 데 적합하며, 객체 형태의 데이터를 저장할 때 유용하다.

  • hset(name, key, value): 해시 내 필드에 값 설정.
  • hget(name, key): 특정 필드의 값을 가져옴.
  • hmget(name, *keys): 여러 필드의 값을 한 번에 조회.
  • hkeys(name): 해시 내 모든 필드 이름을 반환.

예제:

# 사용자 정보를 해시로 저장
conn.hset("user:1001", "name", "Bob")
conn.hset("user:1001", "role", "developer")

# 단일 및 다중 조회
print(conn.hget("user:1001", "name"))  # Bob
fields = conn.hmget("user:1001", "name", "role")
print(fields)  # ['Bob', 'developer']

# 모든 필드 이름 확인
print(conn.hkeys("user:1001"))  # ['name', 'role']

태그: Redis python Caching data structures NoSQL

6월 2일 21:01에 게시됨