Python에서 redis를 데이터베이스로 사용하는 경우 get() 또는 hget()을 사용하여 값을 불러오거나 저장하게된다. 이때 만약 hget()을 사용한다면 어떻게 저장하고 불러와서 보여줄 수 있을지 알아보자. 또한 이 둘의 차이점 역시 아래에서 알아본다.


# get() 그리고 hget() 차이점

먼저 hget()은 hashget으로 get()과는 다르다... get()은 set()과 함께 사용하며 set()을 사용해 key에 매칭하는 값을 string인 문자열로 저장하고 get()으로 불러온다. 반면 hget()은 객체처럼 동작하는 redis 하나의 타입으로 hset()을 사용해 key, property, value처럼 안에 저장할 수 있다.

이를 사용하는 것과 get()을 사용하는 것은 어찌보면 큰 차이가 없다. 다만 구조가 단순하고 쉽게 사용하는 경우 get(), set()이 오히려 나을 것이다. 하지만 hget()의 장점은 모든 값을 불러오거나 저장하지않고 선택한 값만 불러오거나 저장하는것이 가능하다는 점이다. 또 다른 이유로는 여러개의 데이터가 아래처럼 있는 경우 이를 효과적으로 제어할 수 있다.(성능만 고려하는 목적이라면 최대한 단순하게 key, value로 저장하는 get(), set() 조금 더 성능을 나을 수 있다. 다만 성능과 관리적인 측면을 고려하면 그때 그때 상황에 맞는 방법이 필요할 듯 싶다.)

site - webisfree
id - 1004
name - ensso
...
..
.

이들을 문자열로 저장하려면 콤마나 기타 구분자를 사용해야하고 매번 새로운 값을 저장 변경하기 위해 구분자로 값을 다시 풀었다가 묶는 등의 반복이 필요하다. hget(), hset()은 이를 보다 쉽게 관리할 수 있다.


# hget() 및 hset() 예제보기

만약 위의 데이터를 가지고 실제 python 웹어플리케이션에서 사용하는 경우의 예제를 만들어보면서 알아보자. 아래 예제에서는 hset()을 사용하여 저장하고 hget()을 사용하여 저장된 값을 불러오려한다.

@ save.py
import redis

conn = StrictRedis(host='xxx', port=xxxx, db=0)
conn.hset(id, 'site', 'webisfree')

위에서는 hset()을 사용하여 id를 키값으로 몇가지 정보를 저장하였다. 이제 이를 출력하기 위해서 index.py를 만들고 실행해보자. 여기서는 redis의 site값을 출력하는 페이지를 만들어본다.

@ index.py
data = conn.hget(id, 'site')
print data

위에서 data를 출력할 경우 id와 매칭하는 값 중 site의 값을 선택, 출력하게되는 간단한 예제이다.