前編では、memcachedそのものの仕組み・導入方法、PostgreSQLとの連携手順を紹介しました。後編の今回は、いよいよpgmemcacheを使ったmemcached操作を実践していきます。memcachedおよびpgmemcacheについては前編を参照ください。以降の解説は前編で設定した環境を前提にしています。
memcached 1.2.5
データベース:PostgreSQL 8.3.1
OS:CentOS 5(Linux kernel 2.6 )
シェル:bash
CPU:Intel Core2Quad 9660 2.4GHz
RAM:PC2-6400 8GBytes
以降では、前編の内容を前提として、実際にmemcachedにアクセスしながらpgmemcacheの使い方を説明しますので、memcachedが起動されているかどうか確認してください。
最初に、ターミナルソフトpsqlを使って直接pgmemcacheの主要な関数を実行してみます。
次ページからは簡単な例を使って、PostgreSQLとmemcachedを連携させる方法を説明します。
pgmemcacheはlibmemcacheのほとんどの機能を利用できますが、ここでは基本的な関数の説明にとどめます。完全な関数マニュアルは、pgmemcacheのソースコードに付属するREADME.pgmemcacheファイルを参照してください。
pgmemcacheでサポートされている関数1:データの保存
pgmemcacheでは、memcachedのaddコマンド(新規保存)とsetコマンド(新規または更新)、およびreplaceコマンド(更新)がサポートされています。
書式は以下の通りです。
●addコマンド操作の書式(新規保存)
(1) memcache_add('キー', 'データ', EXPIRE 'タイムスタンプ値' )
(2) memcache_add('キー', 'データ', EXPIRE 'INTERVAL期間' )
(3) memcache_add('キー', 'データ' )
●setコマンド操作の書式(新規または更新)
(1) memcache_set('キー', 'データ', EXPIRE 'タイムスタンプ値' )
(2) memcache_set('キー', 'データ', EXPIRE 'INTERVAL期間' )
(3) memcache_set('キー', 'データ' )
●replaceコマンド操作の書式(更新)
(1) memcache_replace('キー', 'データ', EXPIRE 'タイムスタンプ値' )
(2) memcache_replace('キー', 'データ', EXPIRE 'INTERVAL期間 ' )
(3) memcache_replace('キー', 'データ' )
memcache_add()、memcache_set()、memcache_replace()とも引数の取り方は同じです。そこで、ここではmemcache_add()を例に、挙動と使い方を見ていくことにします。
memcache_add()には、引数の与え方によって3つの形式があります。第1引数のキーと第2引数のデータは共通ですが、第3引数のexpire時間(データの保存時間)を指定する方法に違いがあります。
(1)expire時間にTIMESTAMP型で保存期限を指定
memcached側の仕様上の制約のため、指定できる日時は現時刻から1カ月以内の日時です。次の例では、キー「key1」、データ「data1」を、2008年8月31日12時まで保存するように指定しています。
testdb=# SELECT memcache_add ('key1', 'data1', TIMESTAMP '2008-08-31 12:00:00'); memcache_add -------------- t (1 row)
(2)expire時間にINTERVAL型で保存期間を指定
(1)の例と同様、指定できる時間は1カ月以内です。以下の例では、キー「key2」、データ「data2」)を、2日間保存する指定をしています。
testdb=# SELECT memcache_add ('key2', 'data2', INTERVAL '2 days'); memcache_add -------------- t (1 row)
(3)expire時間を指定しない
この場合はexpire時間に0が設定され、memcachedサーバが起動している限り保存され続けます注。以下の例では、キー「key3」、データ「data3」を、memcachedが起動している限り保存する指定をしています。
testdb=# SELECT memcache_add ('key3', 'data3'); memcache_add -------------- t (1 row)
注1:ただし、memcachedが確保するメモリがデータでいっぱいになったときは、LRU(Least Recently Used)アルゴリズムによって古いデータから上書きされていきます。よって、確実にデータが保存されている保証はありません。 詳細は、前編「データ保存に関するTips」を参照してください。
pgmemcacheの関数2:データの取得
データの取得はmemcachedのgetコマンドのみサポートされています。
●getコマンドを操作する場合の書式(取得)
memcache_get('キー')
以下の例では、先ほど保存したデータを取得しています。
testdb=# SELECT memcache_get ('key1'); memcache_get -------------- data1 (1 row) testdb=# SELECT memcache_get ('key2'); memcache_get -------------- data2 (1 row)
pgmemcache関数3:データの削除
データの削除は、deleteコマンド(キーを指定して削除)とflush_allコマンド(すべて削除)がサポートされています。 pgmemcacheからmemcachedのデータを操作する
●deleteコマンドを使う場合の書式(キーを指定して削除)
memcache_delete('キー')
●flush_allコマンドを使う場合の書式(すべて削除)
memcache_flush_all()
以下の例ではキー「key1」のデータのみを指定して削除します。
testdb=# SELECT memcache_delete ('key1'); memcache_delete ----------------- t (1 row)
実際に削除されたかどうか確認してみましょう。
testdb=# SELECT memcache_get ('key1'); memcache_get -------------- (1 row)
以下の例では、flush_allによってすべてのデータを削除します。
testdb=# SELECT memcache_flush_all (); memcache_flush_all -------------------- t (1 row)
ベンチマークのプログラム公開のお知らせ
前編で紹介したベンチマークですが、計測に使ったプログラムをGPLライセンスで公開することにしました。
以下のURLから「mcb.c」というファイルをダウンロードし、指示に従ってコンパイルしてください。
memcached簡易ベンチマーク mcb
http://www.interdb.jp/techinfo/mcb/
動作確認はLinuxとSolarisで行っています。
なお、注意書きにもありますが、ベンチマーク実行時に多くのカーネルリソースを消費するので、テストサーバなどから実行するようにしてください。
Copyright © ITmedia, Inc. All Rights Reserved.