Python

[Python] Redis - 비동기 연결

비번변경 2024. 9. 3. 12:23

개요

2023.06.03-[Python] redis 사용하기, 2024.08.07-[Python] redis - pub/sub 구현하기에서 Python redis 라이브러리를 사용해 Redis에 접속해 메세지를 다뤄봤다.

공식 문서를 보니, Python redis는 비동기 처리도 지원하고 있었다. 이번 글에서는 비동기 방식으로 redis에 접속하고 메세지를 보내는 방법 등을 적어둔다.

 

 

import

비동기 방식으로 redis를 사용할 때는 redis.asyncio를 import하여 사용한다. 보통 redis라고 축약하여 사용하는 것 같다.

import redis.asyncio as redis

참고로 redis.asyncio의 모든 함수는 코루틴이다. 필연적으로 asyncio도 함꼐 import하여 사용하게 된다.

 

 

redis 서버 접속 및 해제

동기 방식과 동일하게 Redis 객체를 생성하여 Redis에 접속한다. 다만 동기 방식과 다르게 연결을 명시적으로 해제해주어야 한다.

import redis.asyncio as redis
import asyncio

async def main():
    # Redis 연결
    redis_conn = redis.Redis(host='localhost', port=6379, decode_responses=True)
    print(await redis_conn.ping())
    
    # Redis 연결 해제
    await redis_conn.aclose()

asyncio.run(main())

참고로 연결 해제의 경우, redis 라이브러리가 5.0.1 미만이라면 Redis.close 함수를 사용해야 한다.

 

 

데이터 쓰기/읽기

동기 방식과 동일하게 set, get 함수를 이용하여 key에 값을 쓰거나 읽을 수 있다.

async def main():
    redis_conn = redis.Redis(host='localhost', port=6379, decode_responses=True)

    await redis_conn.set('hello', 'world')
    print(await redis_conn.get('hello'))

    await redis_conn.aclose()

 

그 외 작업도 동기 방식과 크게 다르지 않은 것 같다. 다만 코루틴을 호출할 때 항상 주의해야 한다……!

 

 

참고 문서

https://redis-py.readthedocs.io/en/stable/examples/asyncio_examples.html