連載
» 2008年08月19日 00時00分 公開

memcachedの使い方(2):pgmemcacheからmemcachedのデータを操作する (1/3)

前編では、memcachedそのものの仕組み・導入方法、PostgreSQLとの連携手順を紹介しました。後編の今回は、いよいよpgmemcacheを使ったmemcached操作を実践していきます。memcachedおよびpgmemcacheについては前編を参照ください。以降の解説は前編で設定した環境を前提にしています。

[鈴木啓修,InterDB]

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('キー', 'データ' )

pgmemcache関数(1) データの保存・更新

 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('キー')

pgmemcache関数(2) データの取得

 以下の例では、先ほど保存したデータを取得しています。

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()

pgmemcache関数(3) データの削除

 以下の例ではキー「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で行っています。

 なお、注意書きにもありますが、ベンチマーク実行時に多くのカーネルリソースを消費するので、テストサーバなどから実行するようにしてください。


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。