Python을 사용하여 Redis hash 데이터 추가하기
Hash
Hash는 임의의 데이터에 대해 고정된 길이의 데이터로 매핑해주는 알고리즘이다.
이 알고리즘이 적용된 함수는 치역 즉, 출력값의 범위가 정해져있으며, 아무리 큰 숫자, 긴 데이터를 넣는다고 하더라도 정해진 범위 내의 값을 출력한다.
Hash 알고리즘의 특성상 입력의 범위(정의역)보다 출력값의 범위(치역)가 작기 때문에, 서로 다른 입력 값에도 동일한 값이 출력되는 경우도 존재할 수 밖에 없으며, 이러한 경우를 충돌한다고 한다.
Hash table (= Hash Map)
Hash 알고리즘을 사용하는 자료구조로, 데이터(대개 키-값 구조)를 저장함에 있어 Key를 입력하면 출력 hash 값을 Index(색인)로 사용하는 table 및 map이라고 할 수 있다.
데이터를 저장하는 자료구조로서 빠른 검색, 빠른 삽입이 가능한 장점이 있다.
물론 위에서 언급한 충돌 현상이 발생하여 같은 index가 만들어질 수 있는데,
이 경우에 데이터를 조회하는 등에 있어서 문제가 생길 듯 하지만 여러가지 해결 방법들이 있으며,
대표적으로 Linked List 자료구조 형태로 같은 인덱스에 데이터가 관리되어 충돌이 일어나면 다음 link로 이동하는 형식으로 시스템이 구성되어 있다.
Python 모듈을 사용해 Redis hashmap에 데이터 추가하기
# -*- coding: utf-8 -*-
import redis
testrd = redis.StrictRedis(host='localhost', port=1111, db=2, password='asdfasdf')
rd.hset("FRUIT:RED_APPLE", mapping={
'skin':'red',
'pulp':'soursweet',
'seed':'smallmany'
}
)
# testrd 네이밍의 Redis 서버와의 연결 변수 생성
# hset을 사용해 hash table에 mapping
위와 같이 python으로 작성된 파일을 생성하고,
python 모듈을 사용할 수 있는 CLI 환경에서 python testapple.py와 같이 명령어를 입력하여, Redis 서버와의 연결을 구축하여 hashmap 자료구조에 데이터를 추가 매핑할 수 있다.
이 방식의 장점은 키-값 데이터 pair들이 무수히 많아질 수록, 또는 추가해야할 데이터 셋이 많아질 수록 일일이 데이터를 입력하여 추가하기에는 매우 번거로워질 것이며, Redis 서버의 백업 및 재부팅 등의 기작이 일어나면, 수동으로 입력한 데이터가 없어지기에 다시 재입력을 해야하는 경우에 매우 곤란해진다.
따라서 이렇게 파이썬 스크립트 파일로 관리하는 것에 큰 장점이 있다.
hset 이외에 데이터를 가져오는 hget이라던가, 사용자 추가 등의 다른 기능들을 활용하고 싶으면,
Redis 공식 홈페이지의 python document를 참고하도록 하자. (~/docs/latest/develop/connect/clients/python)