• 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.3 C 및 C ++에서 libmemcached 사용

libmemcached 라이브러리는 memcached에 대한 C 및 C ++ 인터페이스를 제공하고 여러 가지 추가 API 구현 (Perl, Python, Ruby 포함)의 토대도 제공합니다. libmemcached 의 핵심 기능을 이해하는 것은 이러한 다른 인터페이스를 사용하면 도움이됩니다.

C 라이브러리는 memcached의 가장 포괄적 인 인터페이스 라이브러리이며, libmemcached 라이브러리를 기반으로하지 않는 인터페이스에서는 상시 공개되지 않은 함수와 조작 시스템을 제공합니다.

다양한 함수를 그 기본 조작에 따라 분류 할 수 있습니다. 코어 API로 인터페이스되는 함수 이외에 몇 가지 유틸리티 함수에 의해 확장 기능 (데이터의 말미에 추가하거나 위로의 추가 등)가 제공됩니다.

libmemcached 를 빌드하고 설치하려면 libmemcached 패키지를 다운로드하여 configure를 실행 한 후 빌드 및 설치합니다.

shell> tar xjf libmemcached-0.21.tar.gz
shell> cd libmemcached-0.21
shell> ./configure
shell> make
shell> make install

많은 Linux 운영 체제에서는 일반 yum, apt-get 또는 이와 유사한 명령을 사용하면 해당 libmemcached 패키지를 설치할 수 있습니다.

이 라이브러리를 사용하는 응용 프로그램을 빌드하려면 먼저 서버 목록을 설정합니다. memcached_st 주요 구조체 내부에 구성된 서버를 직접 조작하거나 서버 목록을 별도로 이입하거나하여 그 목록을 memcached_st 구조에 추가합니다. 다음 예제에서는 후자의 방법을 사용하고 있습니다. 서버 목록을 설정 한 후에는 함수를 호출하여 데이터를 저장하거나 검색 할 수 있습니다. 사전 설정 값을 localhost 로 설정하는 간단한 응용 프로그램을 여기에 나타냅니다.

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <libmemcached/memcached.h>

int main(int argc, char *argv[])
{
  memcached_server_st *servers = NULL;
  memcached_st *memc;
  memcached_return rc;
  char *key= "keystring";
  char *value= "keyvalue";

  memcached_server_st *memcached_servers_parse (char *server_strings);
  memc= memcached_create(NULL);

  servers= memcached_server_list_append(servers, "localhost", 11211, &rc);
  rc= memcached_server_push(memc, servers);

  if (rc == MEMCACHED_SUCCESS)
    fprintf(stderr,"Added server successfully\n");
  else
    fprintf(stderr,"Couldn't add server: %s\n",memcached_strerror(memc, rc));

  rc= memcached_set(memc, key, strlen(key), value, strlen(value), (time_t)0, (uint32_t)0);

  if (rc == MEMCACHED_SUCCESS)
    fprintf(stderr,"Key stored successfully\n");
  else
    fprintf(stderr,"Couldn't store key: %s\n",memcached_strerror(memc, rc));

  return 0;
}

조작이 성공했는지 여부를 테스트하려면 특정 함수의 반환 값 (또는 이입 된 결과 코드)를 사용합니다. 조작이 성공했을 경우,이 값은 항상 MEMCACHED_SUCCESS 로 설정됩니다. 오류가 발생한 경우 memcached_strerror() 함수를 사용하여 결과 코드를 출력 가능한 문자열로 변환합니다.

응용 프로그램을 빌드하려면 memcached 라이브러리를 지정합니다.

 shell> gcc -o memc_basic memc_basic.c -lmemcached

memcached 서버를 시작한 후 위의 샘플 응용 프로그램을 실행하면 성공 메시지가 반환됩니다.

shell> memc_basic
Added server successfully
Key stored successfully
16.6.3.3.1 libmemcached 의 기반 함수

libmemcached 의 기반 함수를 사용하면 memcached 서버와의 인터페이스로 사용되는 memcached_st 주요 구조체를 생성, 파괴 및 복제 할 수 있습니다. 주요 함수의 정의를 보여줍니다.

 memcached_st *memcached_create (memcached_st *ptr);

다른 libmemcached API 함수에서 사용하는 새로운 memcached_st 구조를 만듭니다. 기존의 정적 memcached_st 구조를 지정하거나 NULL 을 지정해 새로운 구조체를 할당 할 수 있습니다. 생성 된 구조체에 대한 포인터를 반환합니다. 실패시 NULL 을 반환합니다.

 void memcached_free (memcached_st *ptr);

이전에 작성된 memcached_st 구조체에 할당 된 구조체와 메모리를 해제합니다.

 memcached_st *memcached_clone(memcached_st *clone, memcached_st *source);

지정된 source 에서 기존 memcached 구조를 복제하고 그 구조체에 정의되어있는 기본 및 서버 목록을 복사합니다.

16.6.3.3.2 libmemcached 서버 함수

libmemcached API는 memcached_server_st 구조에 저장되어있는 서버 목록을 사용하여 나머지 함수에서 사용되는 서버 목록 역할을합니다. memcached 를 사용하려면 먼저 서버 목록을 만든 다음 해당 서버 목록을 유효한 libmemcached 객체에 적용합니다.

이 서버 목록과 활성 libmemcached 개체의 서버 목록은 별도로 조작 할 수 있기 때문에 활성 libmemcached 인터페이스를 실행하는 동안 서버 목록을 업데이트하고 관리 할 수 있습니다.

memcached_st 구조의 서버 목록을 조작하는 함수는 다음과 같습니다.

memcached_return
   memcached_server_add (memcached_st *ptr,
                         char *hostname,
                         unsigned int port);

지정된 hostname 과 port 를 사용하여 ptr 에 지정된 memcached_st 구조에 서버를 추가합니다.

memcached_return
   memcached_server_add_unix_socket (memcached_st *ptr,
                                     char *socket);

memcached_st 구조로 구성된 서버 목록에 Unix 소켓을 추가합니다.

 unsigned int memcached_server_count (memcached_st *ptr);

memcached_st 구조에 포함되어 구성된 서버의 카운트를 돌려줍니다.

memcached_server_st *
   memcached_server_list (memcached_st *ptr);

memcached_st 구조에 포함 된 미리 정의 된 호스트의 배열을 돌려줍니다.

memcached_return
   memcached_server_push (memcached_st *ptr,
                          memcached_server_st *list);

현재 memcached_st 구조로 구성되어있는 서버 목록에 기존 서버 목록을 푸시합니다. 이렇게하면 기존리스트의 말미에 서버가 추가되지만 중복은 확인하지 않습니다.

memcached_server_st 구조를 사용하여 memcached 서버의 목록을 만들고 그들을 memcached_st 구조에 개별적으로 적용 할 수 있습니다.

memcached_server_st *
   memcached_server_list_append (memcached_server_st *ptr,
                                 char *hostname,
                                 unsigned int port,
                                 memcached_return *error);

hostname 과 port 를 사용하여 ptr 의 서버 목록에 서버를 추가합니다. 결과 코드는 error 인자에 의해 처리됩니다. 이 인수는 기존 memcached_return 변수를 말합니다. 이 함수는 반환 된 목록에 대한 포인터를 반환합니다.

 unsigned int memcached_server_list_count (memcached_server_st *ptr);

서버 목록에서 서버 수를 돌려줍니다.

 void memcached_server_list_free (memcached_server_st * ptr);

서버 목록에 연결된 메모리를 해제합니다.

 memcached_server_st *memcached_servers_parse (char *server_strings);

서버 목록을 포함하는 문자열을 해석합니다. 각 서버는 쉼표, 공백, 또는 둘 모두로 구분 개별 서버는 server [: port ] 형식으로되어 있습니다. 반환 값은 서버 목록 구조입니다.

16.6.3.3.3 libmemcached 설정 함수

libmemcached 의 설정 관련 함수는 memcached 프로토콜에서 지원하는 코어 함수와 동일한 기능을 제공합니다. 각종 함수의 완전한 정의는 모든 기반 함수 ( add , replace , prepend , append )와 동일합니다. 예를 들어, memcached_set() 함수 정의는 다음과 같습니다.

memcached_return
   memcached_set (memcached_st *ptr,
                  const char *key,
                  size_t key_length,
                  const char *value,
                  size_t value_length,
                  time_t expiration,
                  uint32_t flags);

ptr 은 memcached_st 구조입니다. key 와 key_length 은 키의 이름과 길이를 정의하고 value 와 value_length 는 해당 값과 길이를 정의합니다. 취소 및 옵션 플래그를 설정할 수도 있습니다. 자세한 내용은 섹션 16.6.3.3.5 " libmemcached 의 동작 제어 " 를 참조하십시오.

이 표는 libmemcached 의 나머지 설정 관련 함수와 memcached 프로토콜에서 지원되는 동일한 코어 함수의 개요를 나타냅니다.

libmemcached 함수 동일한 코어 함수
memcached_set(memc, key, key_length, value, value_length, expiration, flags) 일반 set() 조작.
memcached_add(memc, key, key_length, value, value_length, expiration, flags) 일반 add() 함수.
memcached_replace(memc, key, key_length, value, value_length, expiration, flags) 일반 replace() .
memcached_prepend(memc, key, key_length, value, value_length, expiration, flags) 지정된 value 를 지정된 key 의 현재 값 앞에 추가합니다.
memcached_append(memc, key, key_length, value, value_length, expiration, flags) 지정된 value 를 지정된 key 의 현재 값 뒤에 추가합니다.
memcached_cas(memc, key, key_length, value, value_length, expiration, flags, cas) 서버에서 해당 cas 값이 같은 경우는 특정 키의 데이터를 덮어 씁니다.
memcached_set_by_key(memc, master_key, master_key_length, key, key_length, value, value_length, expiration, flags) 일반 set() 와 거의 동일하지만, 개별 서버를 식별하는 데 사용할 수있는 추가 마스터 키 옵션을 제공합니다.
memcached_add_by_key(memc, master_key, master_key_length, key, key_length, value, value_length, expiration, flags) 일반 add() 와 거의 동일하지만, 개별 서버를 식별하는 데 사용할 수있는 추가 마스터 키 옵션을 제공합니다.
memcached_replace_by_key(memc, master_key, master_key_length, key, key_length, value, value_length, expiration, flags) 일반 replace() 와 거의 동일하지만, 개별 서버를 식별하는 데 사용할 수있는 추가 마스터 키 옵션을 제공합니다.
memcached_prepend_by_key(memc, master_key, master_key_length, key, key_length, value, value_length, expiration, flags) memcached_prepend() 와 거의 동일하지만, 개별 서버를 식별하는 데 사용할 수있는 추가 마스터 키 옵션을 제공합니다.
memcached_append_by_key(memc, master_key, master_key_length, key, key_length, value, value_length, expiration, flags) memcached_append() 와 거의 동일하지만, 개별 서버를 식별하는 데 사용할 수있는 추가 마스터 키 옵션을 제공합니다.
memcached_cas_by_key(memc, master_key, master_key_length, key, key_length, value, value_length, expiration, flags) memcached_cas() 와 거의 동일하지만, 개별 서버를 식별하는 데 사용할 수있는 추가 마스터 키 옵션을 제공합니다.

by_key 메소드는 서버 선택의 해시 단계에서 사용 및 적용되는 마스터 키를 정의하는 두 개의 인수가 추가되어 있습니다. 이것은 다음의 정의에서 확인할 수 있습니다.

memcached_return
   memcached_set_by_key(memcached_st *ptr,
                        const char *master_key,
                        size_t master_key_length,
                        const char *key,
                        size_t key_length,
                        const char *value,
                        size_t value_length,
                        time_t expiration,
                        uint32_t flags);

모든 함수가 MEMCACHED_SUCCESS 상수와 비교할 수 memcached_return 형의 값을 돌려줍니다.

16.6.3.3.4 libmemcached 의 취득 함수

libmemcached 함수는 하나의 항목에 직접 액세스와 여러 키를 동시에 가져올 때 응답이 매우 빠르게 여러 키 요청 메커니즘을 제공합니다.

일반 get() 과 동등한 주요 get 스타일의 함수는 memcached_get() 입니다. 이 함수는 지정된 키에 관련 지을 수 있었던 값을 가리키는 문자열 포인터를 반환합니다.

char *memcached_get (memcached_st *ptr,
                     const char *key, size_t key_length,
                     size_t *value_length,
                     uint32_t *flags,
                     memcached_return *error);

여러 키 get이다 memcached_mget() 도 사용 가능합니다. 여러 키 가져 오기 작업을 사용하면 memcached_get() 를 개별적으로 호출하여 키 값을 검색하는 것보다 1 블록의 작업을 매우 빠르게 수행 할 수 있습니다. 여러 키 검색을 시작하려면 memcached_mget() 를 호출합니다.

memcached_return
    memcached_mget (memcached_st *ptr,
                    char **keys, size_t *key_length,
                    unsigned int number_of_keys);

반환 값은 작업의 성공입니다. keys 매개 변수는 키를 포함하는 문자열 배열 key_length 대응하는 각 키의 길이를 포함한 배열입니다. number_of_keys 배열에 설정 한 키의 수입니다.

개별 값을 페치하려면 memcached_fetch() 를 사용하여 대응하는 각 값을 가져옵니다.

char *memcached_fetch (memcached_st *ptr,
                       const char *key, size_t *key_length,
                       size_t *value_length,
                       uint32_t *flags,
                       memcached_return *error);

이 함수는 키 값을 돌려주고, key , key_length 및 value_length 매개 변수에 해당하는 키와 길이 정보를 채 웁니다. 이 함수는 반환 값이 없어 졌을 때에 NULL 을 반환합니다. 키 데이터의 이입과 정보의 반환을 포함하여 완전한 예를 여기에 나와 있습니다.

#include <stdio.h>
#include <sstring.h>
#include <unistd.h>
#include <libmemcached/memcached.h>

int main(int argc, char *argv[])
{
  memcached_server_st *servers = NULL;
  memcached_st *memc;
  memcached_return rc;
  char *keys[]= {"huey", "dewey", "louie"};
  size_t key_length[3];
  char *values[]= {"red", "blue", "green"};
  size_t value_length[3];
  unsigned int x;
  uint32_t flags;

  char return_key[MEMCACHED_MAX_KEY];
  size_t return_key_length;
  char *return_value;
  size_t return_value_length;

  memc= memcached_create(NULL);

  servers= memcached_server_list_append(servers, "localhost", 11211, &rc);
  rc= memcached_server_push(memc, servers);

  if (rc == MEMCACHED_SUCCESS)
    fprintf(stderr,"Added server successfully\n");
  else
    fprintf(stderr,"Couldn't add server: %s\n",memcached_strerror(memc, rc));

  for(x= 0; x < 3; x++)
    {
      key_length[x] = strlen(keys[x]);
      value_length[x] = strlen(values[x]);

      rc= memcached_set(memc, keys[x], key_length[x], values[x],
                        value_length[x], (time_t)0, (uint32_t)0);
      if (rc == MEMCACHED_SUCCESS)
        fprintf(stderr,"Key %s stored successfully\n",keys[x]);
      else
        fprintf(stderr,"Couldn't store key: %s\n",memcached_strerror(memc, rc));
    }

  rc= memcached_mget(memc, keys, key_length, 3);

  if (rc == MEMCACHED_SUCCESS)
    {
      while ((return_value= memcached_fetch(memc, return_key, &return_key_length,
                                            &return_value_length, &flags, &rc)) != NULL)
        {
          if (rc == MEMCACHED_SUCCESS)
            {
              fprintf(stderr,"Key %s returned %s\n",return_key, return_value);
            }
        }
    }

  return 0;
}

위의 응용 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.

shell> memc_multi_fetch
Added server successfully
Key huey stored successfully
Key dewey stored successfully
Key louie stored successfully
Key huey returned red
Key dewey returned blue
Key louie returned green
16.6.3.3.5 libmemcached 의 동작 제어

libmemcached 동작은 하나 이상의 동작 플래그를 설정하여 변경할 수 있습니다. 이들은 글로벌로 설정하거나 개별 함수를 호출하는 동안 적용 할 수 있습니다. 서버 선택시 사용되는 해시 메커니즘 등 추가 설정을 적용 동작도 있습니다.

글로벌 동작을 설정하려면 :

memcached_return
   memcached_behavior_set (memcached_st *ptr,
                           memcached_behavior flag,
                           uint64_t data);

현재 동작 설정을 얻으려면 :

uint64_t
   memcached_behavior_get (memcached_st *ptr,
                           memcached_behavior flag);

libmemcached 동작 플래그를 다음 표에 나타냅니다.

동작 설명
MEMCACHED_BEHAVIOR_NO_BLOCK libmemcached 에서 비동기 I / O를 사용합니다.
MEMCACHED_BEHAVIOR_TCP_NODELAY 이 네트워크 소켓을 NODELAY을 선택합니다.
MEMCACHED_BEHAVIOR_HASH 값이없는 경우는 MD5를 사용하여 키의 기본 해시 알고리즘을 설정합니다. 다른 유효한 값으로 MEMCACHED_HASH_DEFAULT , MEMCACHED_HASH_MD5 , MEMCACHED_HASH_CRC , MEMCACHED_HASH_FNV1_64 , MEMCACHED_HASH_FNV1A_64 , MEMCACHED_HASH_FNV1_32 및 MEMCACHED_HASH_FNV1A_32 수 있습니다.
MEMCACHED_BEHAVIOR_DISTRIBUTION 특정 값을 저장하는 데 사용되는 서버의 선택 방법을 변경합니다. 기본 방법은 MEMCACHED_DISTRIBUTION_MODULA 입니다. 일관성 해시를 사용하려면 MEMCACHED_DISTRIBUTION_CONSISTENT 을 설정합니다. MEMCACHED_DISTRIBUTION_CONSISTENT 값 MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA 의 별칭입니다.
MEMCACHED_BEHAVIOR_CACHE_LOOKUPS DNS 서비스에 대해 수행 된 조회를 캐시합니다. 개별 호스트에 IP 주소 대신 이름을 사용하는 경우, 이는 성능을 향상시킬 수 있습니다.
MEMCACHED_BEHAVIOR_SUPPORT_CAS CAS 작업을 지원합니다. 성능이 저하되기 때문에 기본적으로이 무효가되어 있습니다.
MEMCACHED_BEHAVIOR_KETAMA 기본 분포를 MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA 로 설정하고 해시를 MEMCACHED_HASH_MD5 로 설정합니다.
MEMCACHED_BEHAVIOR_POLL_TIMEOUT poll() 에서 사용되는 타임 아웃 값을 변경합니다. 시간 제한 값은 signed int 포인터를 지정합니다.
MEMCACHED_BEHAVIOR_BUFFER_REQUESTS I / O 요청을 보내지 않고 버퍼링합니다. 이 데이터는 검색 작업 또는 연결 닫기에 의해 플래시됩니다.
MEMCACHED_BEHAVIOR_VERIFY_KEY 지정된 키가 유효한지 여부를 libmemcached 가 강제로 검증합니다.
MEMCACHED_BEHAVIOR_SORT_HOSTS 설정하면 memcached_st 구조 구성된 호스트 목록에 추가 된 호스트가 정렬 된 순서로 호스트 목록에 배치됩니다. 그러면 일관성 해시가 활성화되어있는 경우는 그 동작이 취소됩니다.
MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT 비 블록 모드에서는이를 통해 소켓 연결 중 시간 초과 값이 변경됩니다.
16.6.3.3.6 libmemcached 명령 행 유틸리티

libmemcached 에는 주요 C 라이브러리 인터페이스뿐만 아니라, memcached 응용 프로그램의 조작이나 디버깅에 도움이되는 몇 가지 명령 행 유틸리티가 포함되어 있습니다.

모든 명령 줄 도구는 몇 가지 인수를 허용하지만 그 중 가장 중요한 것은 정보를 반환 할 때 연결할 서버의 목록을 지정 servers 입니다.

주요 도구는 다음과 같습니다.

  • memcat : 지정된 각 ID 값을 명령 행에 표시합니다.

    shell> memcat --servers=localhost hwkey
    Hello world
    
  • memcp : 파일 이름을 키로 사용하여 파일의 내용을 캐시에 복사합니다.

    shell> echo "Hello World" > hwkey
    shell> memcp --servers=localhost hwkey
    shell> memcat --servers=localhost hwkey
    Hello world
    
  • memrm : 캐시에서 항목을 제거합니다.

    shell> memcat --servers=localhost hwkey
    Hello world
    shell> memrm --servers=localhost hwkey
    shell> memcat --servers=localhost hwkey
    
  • memslap : 취득 / 설정 및 여러 클라이언트의 동작을 시뮬레이션하여 하나 이상의 memcached 서버에 대한 부하를 테스트합니다. 예를 들어, 검색 작업을 수행하는 100 대의 클라이언트의 부하를 시뮬레이션 할 수 있습니다.

    shell> memslap --servers=localhost --concurrency=100 --flush --test=get
    memslap --servers=localhost --concurrency=100 --flush --test=get	Threads connecting to servers 100
    	Took 13.571 seconds to read data
    
  • memflush : memcached 캐시의 내용을 플래시 (하늘에)합니다.

    shell> memflush --servers=localhost
    


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