Redis의 설치
Redis란?
Redis(REmote DIctionary System)는 BSD 라이선스를 기반으로 하는 오픈소스로 인 메모리(In-memory) 기반입니다. 이는 다양한 자료 구조를 지원하면서 동시에 인메모리 방식으로 데이터베이스, 캐시 또는 메시지 전달자로 사용됩니다1. 이러한 특징으로 인해서 Redis는 인스타그램, 네이버 재팬의 LINE 메신저 서비스, 스택 오버플로우(StackOverflow), 블리자드 등 여러 소셜 서비스에서 널리 사용되고 있습니다2.
Redis의 설치
Redis를 사용하기 위해 package 매니저로 다운을 받는 방법도 있지만, 본 글에서는 소스 코드를 통해서 받는 방법을 설명하도록 하겠습니다. 만약 본인이 WSL(Windows Subsystem for Linux)에서 redis를 돌리고자 한다면 이 글을 참고 바랍니다.
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
여기까지 했다면, 이제는 빌드를 해야 합니다. 이때, 5.0.4 Build fail : undefined reference to __atomic_fetch_add_8
라는 문제가 뜨는 경우가 발생하는 경우에는 redis-stable/src
에 들어가서 Makefile
에서 FINAL_LIBS=-lm
을 FINAL_LIBS=-lm -latomic
으로 변경해주시길 바랍니다.
sudo apt install tcl tk
cd redis-stable
make
만약 문제없이 빌드가 되었다면, 빌드 내용에 대해서 테스트를 진행하도록 합니다.
make test
테스트가 완료되었다고 뜨면 아래의 일을 수행하도록 합니다.
sudo make install
그리고 redis-server
를 통해 실행시키고 redis-cli
를 통해서 redis
에 정상적으로 접근할 수 있는지를 확인하도록 합니다.
Redis 모듈 설치
Python 에서의 Redis
Python에서 redis를 실행시키기 위해서는 먼저 pip install redis
를 통해서 Python용 redis 모듈을 설치하도록 합니다.
sudo pip3 install redis
이 다음에 python을 실행시키고 간단한 프로그램을 돌려보도록 합니다3.(이름을 redis.py
로 하지 않도록 합니다. 그렇게 하는 경우에는 import redis
가 재귀적으로 파일을 호출하여 StrictRedis
를 찾을 수 없다고 뜰 것이기 때문입니다4.)
# filename: redis-sample.py
import redis
try:
conn_info = {
'host': 'localhost',
'port': 6379,
'db': 0,
}
conn = redis.StrictRedis(
host = conn_info['host'],
port = conn_info['port'],
db = conn_info['db'])
print('set result: {}'.format(conn.set('value', 1)))
print('get result: {}'.format(conn.get('value')))
print('delete result: {}'.format(conn.delete('value')))
print('get result: {}'.format(conn.get('value')))
except Exception as e:
print('Error: {}'.format(e))
이 다음에 python3 redis-sample.py
를 수행하면 다음과 같은 결과를 얻을 수 있다.
set result: True
get result: b'1'
delete result: 1
get result: None
C/C++ 에서의 Redis
Redis를 사용하는 데에는 무수히 많은 라이브러리들이 존재합니다. 하지만 C++의 경우에는 추천하는 redis 라이브러리가 없는 것을 알 수 있습니다5. 그래서 C++에서 redis를 개발할 때에는 C 라이브러리인 hiredis를 사용하는 것을 추천합니다.
hiredis의 설치 방법은 간단합니다. 먼저 Redis 설치 방법과 동일하게 웹에서 소스 코드를 다운 받도록 합니다.
wget https://github.com/redis/hiredis/archive/v0.14.0.tar.gz
tar -xvzf v0.14.0.tar.gz
cd hiredis-0.14.0
다운 받은 후에는 빌드를 하고 설치를 진행합니다.
sudo make && sudo make install
설치가 완료되었으면 아래와 같은 코드를 작성합니다67.
// filename: redis-sample.c
#include <stdio.h>
#include <hiredis/hiredis.h>
int main(void) {
const char *host = "localhost";
const int port = 6379;
struct timeval timeout = {1, 500000}; // 1.5 seconds
redisReply *reply;
redisContext *conn = redisConnectWithTimeout(host, port, timeout);
reply = redisCommand(conn, "SET %s %d", "value", 1);
printf("set result: %s\n", reply->str);
freeReplyObject(reply);
reply = redisCommand(conn, "GET %s", "value");
printf("set result: %s\n", reply->str);
freeReplyObject(reply);
reply = redisCommand(conn, "DEL %s", "value");
printf("set result: %s\n", reply->str);
freeReplyObject(reply);
reply = redisCommand(conn, "GET %s", "value");
printf("set result: %s\n", reply->str);
freeReplyObject(reply);
redisFree(conn);
return 0;
}
코드를 작성을 했다면, 다음 명령을 통해서 컴파일하고 실행해보도록 합니다. 만약에 <hiredis/hiredis.h>
와 같이 사용하지 않고, <hiredis.h>
와 같이 사용하고자 한다면 -I/usr/local/include/hiredis
를 인자 값으로 추가해주도록 합니다.
gcc redis-sample.c -L/usr/local/lib -lhiredis
./a.out
실행을 하면 다음과 같은 결과가 나오게 됩니다.
set result: OK
set result: 1
set result: (null)
set result: (null)
앞서 짠 python의 코드를 동일하게 수행하는 코드를 작성한 것입니다.
참고 자료
-
https://redis.io/ ↩
-
https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=38&dbnum=176019&mode=detail&type=techreport ↩
-
https://bstar36.tistory.com/351 ↩
-
https://github.com/andymccurdy/redis-py/issues/533 ↩
-
https://redis.io/clients ↩
-
https://github.com/redis/hiredis/blob/master/examples/example.c ↩
-
http://yular.github.io/2017/01/28/C-Redis-QuickStart/ ↩