C言語 libmemcachedを使う
スポンサーリンク
このドキュメントの内容は、以下の通りです。
C言語からlibmemcachedを使用してみました。pecl-libmemcacheと同じような振る舞いをすると思っていたら、異なった振る舞いをしていました。
pecl-libmemcacheは、複数あるmemcachedの1つが存在しなくなったら(プロセスを落としたら)、そのmemcachedにはset/getはせずに、他のmemcachedを利用していました。その代わり、今までaの値をset/getしているサーバがほかのサーバになってしまい、急にキャッシュが効かなくなります。
libmemcachedの場合は、memcached_server_list_append()で追加したmemcachedのすべてがある前提で、常に格納先が決定されています。
だから、aの値をset/getするサーバは、稼働していようがいまいが、常に同じです。
// Last update: 2009/07/21 10:51:53
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <libmemcached/memcached.h>
memcached_return
Memcached_behavior_set(memcached_st *ptr, memcached_behavior flag,
uint64_t data)
{
memcached_return rc = memcached_behavior_set(ptr, flag, data);
if (MEMCACHED_SUCCESS != rc) {
warnx ( "%s: %s", __func__, memcached_strerror(ptr,rc));
}
return rc;
}
int
main (int argc, char *argv[])
{
struct memcached_st *mmc = NULL;
struct memcached_server_st *servers = NULL;
memcached_return rc;
int i;
char *hostnames[] = {
"192.168.0.2",
"192.168.0.3"
};
mmc = memcached_create(NULL);
if (! mmc) {
warnx ("can not create memcached");
exit(1);
}
int port = 11211;
char **p;
for (p = hostnames; **p; ++p) {
servers = memcached_server_list_append(servers,
*p, port, & rc);
if (MEMCACHED_SUCCESS != rc) {
warnx ( memcached_strerror(mmc, rc) );
}
}
rc = memcached_server_push(mmc, servers);
if (MEMCACHED_SUCCESS != rc) {
warnx ( memcached_strerror(mmc, rc) );
}
memcached_server_list_free(servers);
char *key1 = "a";
char *key2 = "b";
char *value1 = "123";
char *value2 = "456";
time_t expire = 33; // expire させる秒数
uint32_t flags = 0;
size_t len;
char *val;
rc = memcached_set(mmc, key1, strlen(key1),
value1, strlen(value1), expire, flags);
if (MEMCACHED_SUCCESS != rc) {
warnx ("can not set %s", key1);
warnx ( memcached_strerror(mmc, rc) );
}
rc = memcached_set(mmc, key2, strlen(key2),
value2, strlen(value2), expire, flags);
if (MEMCACHED_SUCCESS != rc) {
warnx ("can not set %s", key2);
warnx ( memcached_strerror(mmc, rc) );
}
val = memcached_get(mmc, key1, strlen(key1),
&len, &flags, &rc);
if (MEMCACHED_SUCCESS != rc) {
warnx ("can not read %s", key1);
warnx ( memcached_strerror(mmc, rc) );
} else {
printf("%s\n", val);
}
free(val);
val = memcached_get(mmc, key2, strlen(key2),
&len, &flags, &rc);
if (MEMCACHED_SUCCESS != rc) {
warnx ("can not read %s", key2);
warnx ( memcached_strerror(mmc, rc) );
} else {
printf("%s\n", val);
}
free(val);
memcached_free(mmc);
exit (EXIT_SUCCESS);
}
コンパイル
gcc -I/usr/local/include -L/usr/local/lib/ -lmemcached libmemcached.c
参考
http://docs.libmemcached.org/
メモ
とある環境で、libmemcachedを使ってmemcachedにset/getをさせているときに、memcachedを終了させるとプログラムがcore dumpしてしまいました。
FreeBSD 6/FreeBSD 7の環境でテストしている分には、落ちなかったので、たぶん、とある環境のlibmemcachedが古いか、OSが古いのが原因だと思われます。
クライアント FreeBSD 6.3 AMD Athlon(tm) 64 X2 Dual Core Processor 4800+ (2412.38-MHz 686-class CPU) メモリ1GB 100base
memcached FreeBSD 7.2 AMD Athlon(tm) 64 X2 Dual Core Processor 4800+ (2412.38-MHz 686-class CPU) メモリ1GB 1000base
の環境で260万の値のsetやgetは、それぞれ7分半でできました。
秒間 8000 set、8000 getぐらいの性能でした。
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12