오늘 upstash-redis 파이썬 패키지의 v1.0.0 버전을 출시했습니다. GitHub과 PyPI에서 바로 확인하고 설치할 수 있습니다.
이 패키지는 Upstash Redis를 위한 연결 없는(connectionless) HTTP 기반 클라이언트입니다. AWS Lambda, Google Cloud Functions와 같은 서버리스 환경이나 TCP 대신 HTTP가 선호되는 어떤 환경에서도 손쉽게 사용할 수 있도록 설계되었습니다.
새로워진 점
새 버전부터는 모든 명령어에 사용 예제가 포함된 파이썬 독스트링(docstring)이 제공됩니다. 덕분에 코드 작성 중 IDE 자동 완성과 함께 각 명령어의 사용법을 즉시 확인할 수 있습니다.

모든 명령어에 대한 상세 문서와 예제는 Upstash Redis 파이썬 공식 문서에서도 찾아볼 수 있습니다.
빠른 시작
먼저 패키지를 설치합니다.
pip install upstash-redis
Redis 클라이언트를 생성합니다.
from upstash_redis import Redis
redis = Redis(url="UPSTASH_REDIS_REST_URL", token="UPSTASH_REDIS_REST_TOKEN")
redis.set("key", "value")
생성자에 값을 직접 전달하는 대신 환경 변수 UPSTASH_REDIS_REST_URL과 UPSTASH_REDIS_REST_TOKEN을 활용할 수도 있습니다.
from upstash_redis import Redis
redis = Redis.from_env()
redis.set("key", "value")
SDK는 asyncio와 aiohttp 패키지를 활용한 비동기(async) 함수도 지원합니다.
import asyncio
from upstash_redis.asyncio import Redis
async def main():
redis = Redis.from_env()
await redis.set("key", "value")
asyncio.run(main())
서버리스 환경에서 가능하다면, 함수가 아직 웜(warm) 상태인 동안 클라이언트를 재사용할 수 있도록 요청 핸들러 외부에서 클라이언트를 초기화하는 것을 권장합니다.
일부 명령어의 값(Value) 타입 변경
set, hset 등 일부 명령어는 기존에 값 타입으로 Any를 허용했고, 전달된 값은 json.dumps를 통해 문자열로 변환되었습니다. 이 방식은 일부 명령어에서 혼란을 야기했습니다.
이제 새로운 타입인 ValueT가 도입되어 str, int, float, bool만 허용됩니다.
ValueT = Union[str, int, float, bool]
def set(
self,
key: str,
value: ValueT,
...
) -> Optional[str]: ...
SDK는 여전히 기존 동작을 지원하지만, 타입 힌팅만 변경되었습니다.
# 동작하지만 타입 에러 발생
redis.set("key", {"foo": "bar"})
# 정상 동작
redis.set("key", json.dumps({"foo": "bar"}))
Dict 대신 GeoSearchResult를 반환하는 지오(Geo) 명령어
geosearch와 georadius 명령어는 이제 딕셔너리 대신 훨씬 다루기 편리한 GeoSearchResult 객체를 반환합니다.
Set 대신 List를 반환하는 셋(Set) 명령어
sdiff, sunion, sinter, smembers 메서드의 반환 타입이 Set에서 List로 변경되었습니다. 이를 통해 결과를 순회(iteration)하는 과정에서 불필요한 셋 할당이 사라졌으며, 필요하다면 사용자가 직접 리스트를 셋으로 변환해 사용하면 됩니다.
마무리
새 버전의 패키지가 여러분의 개발에 큰 도움이 되기를 바랍니다. 앞으로 파이썬 SDK에 pipeline 및 json 명령어 지원을 추가할 계획입니다.
파이썬 레이트 리밋(ratelimiting) 라이브러리와 그 외 파이썬 관련 블로그 포스트도 함께 살펴보세요.
궁금한 점이나 피드백이 있다면 X 또는 Discord를 통해 언제든 문의해 주세요.