• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 1. Oracle VM Template for MySQL Enterprise
    2. DRBD/Pacemaker/Corosync/Oracle Linux 사용
    3. Windows 장애 조치 클러스터링 사용
    4. Amazon EC2 인스턴스의 MySQL의 사용
    5. ZFS 복제 사용
    6. MySQL과 memcached의 병용
    1. memcached 설치
    2. memcached 사용
    3. memcached 응용 프로그램 개발
    1. memcached의 기본 조작
    2. MySQL 캐시 레이어로 memcached 사용
    3. C 및 C ++에서 libmemcached 사용
    4. Perl에서 MySQL과 memcached 사용
    5. Python에서 MySQL과 memcached 사용
    6. PHP와 MySQL과 memcached 사용
    7. Ruby에서 MySQL과 memcached 사용
    8. Java에서 MySQL과 memcached 사용
    9. memcached의 TCP 텍스트 프로토콜 사용
    4. memcached 통계의 취득
    5. memcached의 FAQ
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

16.6.3.5 Python에서 MySQL과 memcached 사용

Python의 memcache 모듈은 memcached 서버에 대한 인터페이스이며, 순수하게 Python에서 (즉, 하나의 C API를 사용하지 않고) 기술되어 있습니다. Python Memcached 에서 복사를 다운로드하고 설치할 수 있습니다.

설치 패키지를 다운로드하여 Python 설치 프로그램을 실행합니다.

python setup.py install
running install
running bdist_egg
running egg_info
creating python_memcached.egg-info
...
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing python_memcached-1.43-py2.4.egg
creating /usr/lib64/python2.4/site-packages/python_memcached-1.43-py2.4.egg
Extracting python_memcached-1.43-py2.4.egg to /usr/lib64/python2.4/site-packages
Adding python-memcached 1.43 to easy-install.pth file

Installed /usr/lib64/python2.4/site-packages/python_memcached-1.43-py2.4.egg
Processing dependencies for python-memcached==1.43
Finished processing dependencies for python-memcached==1.43

설치가 완료되면 memcache 모듈은 memcached 서버에 대한 클래스 기반의 인터페이스를 제공합니다. Python의 데이터 구조를 memcached 항목으로 저장하면 그들은 Python의 cPickle 또는 pickle 모듈을 사용하여 자동으로 직렬화 (문자열 값으로 변환)됩니다.

새로운 memcache 인터페이스를 작성하려면 memcache 모듈을 가져 와서 memcache.Client 클래스의 새 인스턴스를 만듭니다. 예를 들어, memcached 데몬이 localhost에서 기본 포트를 사용하여 실행되는 경우 :

import memcache
memc = memcache.Client(['127.0.0.1:11211'])

첫 번째 인수는 사용하는 각 memcached 인스턴스의 서버와 포트 번호를 포함하는 문자열 배열입니다. 디버깅을 사용하려면 옵션 debug 매개 변수를 1로 설정합니다.

기본적으로 항목을 여러 서버로 분배하는 데 사용되는 해시 메커니즘은 crc32 입니다. 사용하는 함수를 변경하려면 memcache.serverHashFunction 값을 대신 사용하는 함수로 설정합니다. 예 :

from zlib import adler32
memcache.serverHashFunction = adler32

memcache 인스턴스에서 사용하는 서버를 정의하면 기본 함수에 의해 범용 인터페이스 사양과 같은 기능이 제공됩니다. 다음 표에는 지원되는 함수의 요약을 나타냅니다.

Python의 memcache 함수 동등한 일반 함수
get() 일반 get() .
get_multi(keys) 지정된 keys 배열에서 여러 값을 가져옵니다. 키 / 값 쌍의 해시 참조를 반환합니다.
set() 일반 set() .
set_multi(dict [, expiry [, key_prefix]]) 지정된 dict 에서 여러 키 / 값 쌍을 설정합니다.
add() 일반 add() .
replace() 일반 replace() .
prepend(key, value [, expiry]) 지정된 value 를 기존의 key 값 앞에 추가합니다.
append(key, value [, expiry[) 지정된 value 를 기존의 key 값 뒤에 추가합니다.
delete() 일반 delete() .
delete_multi(keys [, expiry [, key_prefix]] ) keys 배열의 각 문자열과 일치하는 해시에서 모든 키를 삭제합니다.
incr() 일반 incr() .
decr() 일반 decr() .
참고

Python의 memcache 모듈에서 모든 *_multi() 함수에서 옵션 key_prefix 매개 변수를 지원합니다. 이 문자열은 지정하면 모든 키 조회에 대한 접두어로 사용됩니다. 예를 들어, 다음을 호출하는 경우 :

 memc.get_multi(['a','b'], key_prefix='users:')

이 함수는 서버에서 키 users:a 및 users:b 를 가져옵니다.

MySQL에서 원시 데이터를로드하여 memcache 인스턴스의 정보를 저장하고 검색하는 방법을 여기에 나타냅니다.

import sys
import MySQLdb
import memcache

memc = memcache.Client(['127.0.0.1:11211'], debug=1);

try:
    conn = MySQLdb.connect (host = "localhost",
                            user = "sakila",
                            passwd = "password",
                            db = "sakila")
except MySQLdb.Error, e:
     print "Error %d: %s" % (e.args[0], e.args[1])
     sys.exit (1)

popularfilms = memc.get('top5films')

if not popularfilms:
    cursor = conn.cursor()
    cursor.execute('select film_id,title from film order by rental_rate desc limit 5')
    rows = cursor.fetchall()
    memc.set('top5films',rows,60)
    print "Updated memcached with MySQL data"
else:
    print "Loaded data from memcached"
    for row in popularfilms:
        print "%s, %s" % (row[0], row[1])

처음 실행하면 데이터가 MySQL 데이터베이스에서로드되고 memcached 서버에 저장됩니다.

shell> python memc_python.py
Updated memcached with MySQL data

데이터는 cPickle / pickle 을 사용하여 자동으로 직렬화되기 때문에 데이터를 memcached에서로드 한 때에는 그 개체를 직접 사용할 수 있습니다. 위의 예에서는 memcached 에 저장된 정보가 Python DB 커서에서 인출 된 행의 형식으로되어 있습니다. (60 초 해지 시간 내에) 정보에 액세스하면 데이터가 memcached 에서로드 덤프됩니다.

shell> python memc_python.py
Loaded data from memcached
2, ACE GOLDFINGER
7, AIRPLANE SIERRA
8, AIRPORT POLLOCK
10, ALADDIN CALENDAR
13, ALI FOREVER

직렬화 및 직렬화 해제는 자동으로 이루어집니다. Python 데이터의 직렬화는 다른 인터페이스와 언어와 호환되지 않을 수 있기 때문에 초기화시에 사용되는 직렬화 모듈을 변경할 수 있습니다. 예를 들어 언어로 작성된 스크립트를 사용하여 복잡한 데이터 구조를 저장하고 다른 언어로 작성된 스크립트에서 그들에게 접근 할 때 JSON 포맷을 사용할 수 있습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved