hiredis_async
Hiredis Async
Redis Developer Course | Redis Technical Support | Redis Enterprise Server |
---|
Async 명령
레디스 명령을 비동기(Async)로 실행할 수 있는 방법은 몇 가지 있다.
여기서는 세 가지 방법을 소개한다.
레디스 버전 4.0.10 (2018년 6월 13일 발표)을 기준으로 작성했다.
- AE: A simple event-driven programming library, Hiredis에서 기본으로 사용한다.
- LIBEV: A full-featured and high-performance event loop
- LIBEVENT: An event notification library
AE: A simple event-driven programming library
Hiredis 설치
- Hiredis 홈 페이지
- Redis로 설치할 경우: Makefile에 prefix=/usr/local 이 설정되어 있으므로 make install 하면 C Header 파일은 /usr/local/include에 설치되고, Library 파일은 /usr/local/lib에 설치된다. Root를 사용한다.
- Hiredis로 설치할 경우
- /usr/local/include/에 설치된 header 파일들
- /usr/local/lib/에 설치된 library 파일들
- ae.h: struct aeEventLoop 등이 포함되어 있다. src/ae.h 파일을 /usr/include 디렉토리에 복사한다. 이유는 sample C 소스에서 "hiredis/adapters/ae.h" 파일을 include하는데 이 ae.h에서 <ae.h>를 표준 디렉토리에서 include 하기 때문이다. adapters/ae.h 와 src/ae.h는 다른 파일이다. ae.c에서는 "ae.h"를 include한다. 즉, src/ae.h 파일을 /usr/include에 복사해야 하고 작업 디렉토리에도 있어야 한다.
- ae.c: aeCreateEventLoop() 등이 포함되어 있다.
- ae_epoll.c, ae_evport.c, ae_kqueue.c, ae_select.c: ae.c에서 조건에 따라 이 파일들을 include 한다.
- zmalloc.h: ae.c에서 이 파일을 include하고 zmalloc()를 사용한다.
- zmalloc.c: zmalloc() 등이 포함되어 있다.
- config.h, atomicvar.h: ae.c와 zmalloc.c에서 include하고 있다. ae.h 부터 여기까지 소개된 파일들을 redis src/ 디렉토리로 부터 복사한다.
- async-ae.c: Async 명령 sample C 소스 파일이다.
- Makefile: async-ae.o, ae.o, zmalloc.o, hiredis library를 포함한다.
Sample C 소스 파일 async-ae.c
- async-ae.c에서 #include <hiredis/adapters/ae.h> 이 파일은 redisAeAttach()를 포함하고 있으며,
위에서 설명한 ae.h 파일을 포함하고,
hiredis.h와 async.h를 포함하고 있다. 그러므로 async-ae.c에서 이 두 파일을 포함하지 않아도 된다. - async-ae.c
- cmdCallback(): Async 명령 callback 함수, 세번째 인수는 void *cmd는 원래는 void *privdata 인데 실행 명령을 넣어서 실패시 표시하도록 했다.
- connectCallback(): Async 연결 callback 함수, ac->c.tcp.host는 IP를, ac->c.tcp.port는 포트를, ac->errstr는 에러 메시지를 가지고 있다.
- struct redisAsyncContext
- struct redisContext
- aeMain(): 실제로 event를 처리하는 함수이므로 Connection과 Async 명령 다음에 있어야 한다. 즉, Main() 소스의 맨 마지막에 있어야 한다.
- aeMain() 소스: ae.c에 있다.
- aeStop() 소스: ae.c에 있다.
- 실행 결과
- 레디스 서버가 다운되었을 때 실행 결과
LIBEV
- libev 홈 페이지
- libev library 설치하기: /usr/local에 설치할 것이므로 root를 사용한다.
- /usr/local/include/에 설치된 header 파일들 여기서 event.h 파일에 주의해야 한다. 이 파일은 libevent library에도 동일한 이름의 event.h 파일이 있다. 즉, 나중에 설치한 library의 event.h 파일이 include에 있게 되는 것이다. Libev를 먼저 설치하고 Libevent를 나중에 설치하면 별 문제가 없지만, 순서를 바꾸어서 설치하면 Libevent를 이용한 Async 프로그램이 동작하지 않는다. 이 경우 Libevent에 있는 event.h를 /usr/local/include에 복사하고 다시 컴파일하면 된다.
- /usr/local/lib/에 설치된 library 파일들
- Makefile
- async-libev.c
LIBEVENT: An event notification library
- libevent 홈 페이지
- libevent library 설치하기: /usr/local에 설치할 것이므로 root를 사용한다.
- /usr/local/include/에 설치된 header 파일들
- /usr/local/lib/에 설치된 library 파일들 중 중요한 것을 표시했다.
- Makefile
- async-libevent.c
관련 정보
- libevent 및 libev로 네트워크 성능 향상
- hiredis/examples에 몇 가지 예제가 있다.
<< Pipeline | Async | Server >> |
---|
Email
답글이 올라오면 이메일로 알려드리겠습니다.