16.6.3.4 Perl에서 MySQL과 memcached 사용
         Cache::Memcached 모듈은 Memcache 프로토콜에 대한 기본 인터페이스를 제공하고 memcached에 준비되어있는 핵심 기능을 지원합니다.  이 모듈은 운영 시스템의 패키지 관리 시스템 또는 CPAN 을 사용하여 설치합니다. 
root-shell> perl -MCPAN -e 'install Cache::Memcached'
  Perl에서 Cache::Memcached 모듈을 통해 memcached를 사용하려면 먼저 연결을위한 서버 목록 및 기타 매개 변수를 정의하는 새로운 Cache::Memcached 객체를 만듭니다.  유일한 인수는 캐시 인터페이스에 대한 옵션을 포함 해시입니다.  예를 들어, 3 개의 memcached 서버를 사용하는 새로운 인스턴스를 만들려면 : 
use Cache::Memcached;
my $cache = new Cache::Memcached {
    'servers' => [
        '192.168.0.100:11211',
        '192.168.0.101:11211',
        '192.168.0.102:11211',
	],
};
  여러 서버와 함께 Cache::Memcached 인터페이스를 사용하면이 API는 그룹의 모든 서버에 대해 특정 작업을 자동으로 수행합니다.  예를 들어, Cache::Memcached 를 통해 통계를 검색하면 호스트 단위의 데이터를 포함하는 해시 함께 그룹의 모든 서버에 대해 일반화 된 통계를 반환합니다. 
캐시 객체 인스턴스를 만들 때 인스턴스에 추가 등록 정보를 설정하려면 옵션의 해시의 일부로 옵션을 지정합니다. 또는 인스턴스에 대응하는 방법을 사용할 수도 있습니다.
servers또는set_servers()메소드 : 사용되는 서버의 목록을 지정합니다. 이 서버 목록은 각 요소가 주소와 포트 번호 (콜론으로 구분 된) 조합 인 서버 배열에 대한 참조입니다. Unix 소켓에 의한 로컬 연결을 지정할 수 있습니다 (예를 들어,/tmp/sock/memcached). (해시시에 어느 정도의 빈도로 서버를 사용해야 하는지를 나타낸다) 가중 서버를 지정하려면 memcached 서버 인스턴스와 가중치를 포함한 배열 참조를 지정합니다. 숫자가 높을수록 우선 순위가 높습니다.compress_threshold또는set_compress_threshold()메소드 : 값을 압축 할 때의 임계 값을 지정합니다. 지정된 숫자보다 큰 값은 저장시 및 취득시 (zlib를 사용하여) 자동으로 압축됩니다.no_rehash또는set_norehash()메소드 : 먼저 선택한 서버를 사용할 수없는 경우 새 서버 검색을 해제합니다.readonly또는set_readonly()메소드 : memcached 서버에 쓰기를 해제합니다.
  Cache::Memcached 객체 인스턴스를 구성한 후에는 set() 및 get() 메소드를 사용하면 memcached 서버의 정보를 저장하고 검색 할 수 있습니다.  캐시에 저장되는 개체는 Storable 모듈을 사용하여 자동으로 직렬화 및 직렬화 해제됩니다. 
  Cache::Memcached 인터페이스는 데이터를 저장 / 검색하기 위해 다음 메소드를 지원합니다.  이 표에서 보는 바와 같이 일반 메서드와 관련이 있습니다. 
  Cache::Memcached 함수  | 동등한 범용 메소드 | 
|---|---|
 get()  |    일반 get() .  | 
 get_multi(keys)  |    하나의 쿼리만을 사용하여 memcache에서 여러 keys 를 가져옵니다.  키 / 값 쌍의 해시 참조를 반환합니다.  | 
 set()  |    일반 set() .  | 
 add()  |    일반 add() .  | 
 replace()  |    일반 replace() .  | 
 delete()  |    일반 delete() .  | 
 incr()  |    일반 incr() .  | 
 decr()  |    일반 decr() .  | 
  Perl 및 Cache::Memcached 모듈에서 memcached를 사용하는 완전한 예를 보여줍니다. 
#!/usr/bin/perl
use Cache::Memcached;
use DBI;
use Data::Dumper;
# Configure the memcached server
my $cache = new Cache::Memcached {
    'servers' => [
                   'localhost:11211',
                   ],
    };
# Get the film name from the command line
# memcached keys must not contain spaces, so create
# a key name by replacing spaces with underscores
my $filmname = shift or die "Must specify the film name\n";
my $filmkey = $filmname;
$filmkey =~ s/ /_/;
# Load the data from the cache
my $filmdata = $cache->get($filmkey);
# If the data wasn't in the cache, then we load it from the database
if (!defined($filmdata))
{
    $filmdata = load_filmdata($filmname);
    if (defined($filmdata))
    {
# Set the data into the cache, using the key
	if ($cache->set($filmkey,$filmdata))
        {
            print STDERR "Film data loaded from database and cached\n";
        }
        else
        {
            print STDERR "Couldn't store to cache\n";
	}
    }
    else
    {
     	die "Couldn't find $filmname\n";
    }
}
else
{
    print STDERR "Film data loaded from Memcached\n";
}
sub load_filmdata
{
    my ($filmname) = @_;
    my $dsn = "DBI:mysql:database=sakila;host=localhost;port=3306";
    $dbh = DBI->connect($dsn, 'sakila','password');
    my ($filmbase) = $dbh->selectrow_hashref(sprintf('select * from film where title = %s',
                                                     $dbh->quote($filmname)));
    if (!defined($filmname))
    {
     	return (undef);
    }
    $filmbase->{stars} =
	$dbh->selectall_arrayref(sprintf('select concat(first_name," ",last_name) ' .
                                         'from film_actor left join (actor) ' .
                                         'on (film_actor.actor_id = actor.actor_id) ' .
                                         ' where film_id=%s',
                                         $dbh->quote($filmbase->{film_id})));
    return($filmbase);
}
이 예에서는 Sakila 데이터베이스를 사용하여 데이터베이스에서 영화 데이터를 검색하고 영화와 배우의 복합 레코드를 memcached에 씁니다. 있는 영화를 요청할 때, 그것은 존재하지 않았던 경우,이 결과를 얻을 수 있습니다.
shell> memcached-sakila.pl "ROCK INSTINCT" Film data loaded from database and cached
캐시에 이미 추가되어 영화에 액세스 할 때 :
shell> memcached-sakila.pl "ROCK INSTINCT" Film data loaded from Memcached