Rest Term

libmemcached c++ interface

Pocket

業務で libmemcached を利用した小さなモジュールを作ることになった。このライブラリにはC++インタフェースも用意されているのでCとC++の両方で試してみる。

環境は CentOS 5.6 (x86_64) , gcc4.4, libmemcached-devel

* インストール
remiレポジトリから新しいバージョンを入れる

* 各基本操作(set, get, delete)を行う C版

* コンパイル, 実行 (+ valgrindでメモリリークのチェック)

memcached_get 内で malloc が行われるので free で解放するのを忘れずに。また、key が存在しない場合は NOT FOUND が、memcachedに接続出来ない場合などは FAILURE が返る。

あと、libmemcachedは関係ないけど以下のような警告が出た場合は文字列の扱いを見直す必要がある。

どうやら gcc4.2 から(? 文字列の扱いに厳しくなっていて、const を付けるべき所はちゃんと付けないとだめらしい。見かけない警告だったので少し焦ったけど、そういえば会社の開発環境は gcc4.1 だったかもしれない。

次はC++インタフェースを使う。APIの使い方は libmmecached/memcached.hpp を読んで確認。

* 各基本操作(set, get, delete)を行う C++版

注意する点は、value は std::string ではなく std::vector<char> で扱うところ。

ほとんどのC++ APIは内部でC APIを呼んでいるだけの薄いラッパーになっていて、それらのC APIの結果が MEMCACHED_SUCCESS の場合は true を返す仕様になっている (一部のAPIは memcached_return_t を返す)。ただ、異常系処理において memcache::Error はあまり役に立たず、APIの戻り値チェックがいちいち必要なところは変わらない。。

C APIがどれくらいカバーされているかまだ調べきれてないけど、使うのは簡単なのでつまづくところは少なそう。

あわせて読む:

Pocket

 

Tags: ,

Comments

No comments so far.

  • Leave a Reply
     
    Your gravatar
    Your Name