公式ドキュメントを参照:http://docs.libmemcached.org/index.html
初心者向けチュートリアルによると、C++でmemcachedに接続するクライアントが実装されています。
apt-cache searchコマンドを使用して、必要なライブラリを検索しました。
root@iZwz9aujzgp9b5o38x29akZ:~# apt-cache search memcached | grep C++
libmemcached-dev - memcachedサーバーへのCおよびC++クライアントライブラリ(開発ファイル)
libmemcached11 - memcachedサーバーへのCおよびC++クライアントライブラリ
そこでlibmemcached-devとlibmemcached11をそれぞれインストールしました。
root@iZwz9aujzgp9b5o38x29akZ:~# apt-get install libmemcached11
.....//省略
root@iZwz9aujzgp9b5o38x29akZ:~# apt-get install libmemcached-dev
.....//省略
次にヘッダーファイルの場所を確認しました。
root@iZwz9aujzgp9b5o38x29akZ:~# cd /usr/include/libmemcached/
root@iZwz9aujzgp9b5o38x29akZ:/usr/include/libmemcached# ll
合計 20
drwxr-xr-x 2 root root 4096 1月 19 19:16 ./
drwxr-xr-x 40 root root 4096 1月 19 19:15 ../
-rw-r--r-- 1 root root 1713 1月 18 2019 memcached.h
-rw-r--r-- 1 root root 1717 1月 18 2019 memcached.hpp
-rw-r--r-- 1 root root 1714 1月 18 2019 util.h
これはlibmemcachedの公式ドキュメントに一致しています。
次に、テストプログラムを作成してmemcachedに接続します。
公式ドキュメントのリソースを参考に、以下のテストプログラムを作成しました。
vim memcached_connection_test.cpp
1 #include <iostream>
2
3 #include <string.h>
4 #include <libmemcached/memcached.h>
5
6 using namespace std;
7 int main()
8 {
9 const char * server_config = "--SERVER=127.0.0.1";
10 memcached_st * cache_client = NULL;
11 cout << static_cast<const void *>(cache_client) << endl;
12 cache_client = memcached(server_config, strlen(server_config));
13 cout << static_cast<const void *>(cache_client) << endl;
14 memcached_free(cache_client);
15 cout << static_cast<const void *>(cache_client) << endl;
16 return 0;
17 }
コンパイルを実行します。
g++ memcached_connection_test.cpp -o memcached_connection_test.exe
/tmp/ccf2s5UM.o: In function `main':
memcached_connection_test.cpp:(.text+0x2d): `memcached'に対する定義されていない参照
memcached_connection_test.cpp:(.text+0x3d): `memcached_free'に対する定義されていない参照
collect2: error: ldは1の終了ステータスを返しました
ここでエラーが発生しました。これは動的ライブラリがリンクされていないため、最終的なリンクに失敗したためです。
g++ memcached_connection_test.cpp -lmemcached -o memcached_connection_test.exe
コンパイルが成功しました。./memcached_connection_test.exeを実行します。
root@iZwz9aujzgp9b5o38x29akZ:~/memcached_cpp# ./memcached_connection_test.exe
0
0x557ca3ff3280
0x557ca3ff3280
memcached()がメモリを割り当てたことを示しています。接続が成功したことを確認するために、memcacheからデータを取得してみましょう。
1 #include <iostream>
2
3 #include <string.h>
4 #include <libmemcached/memcached.h>
5
6 using namespace std;
7
8 int main()
9 {
10 const char * server_config = "--SERVER=127.0.0.1";
11 memcached_st * cache_client = memcached(server_config, strlen(server_config));
12 memcached_return_t result;
13 const char * data_key = "username";
14 size_t data_length;
15 uint32_t data_flags;
16 char * data_value = memcached_get(cache_client, data_key, strlen(data_key), &data_length, &data_flags, &result);
17 cout << "キー:" << data_key << endl;
18 cout << "結果:" << result << endl;
19
20 if(memcached_success(result))
21 {
22 cout << "値:" << data_value << endl;
23 cout << "値の長さ:" << data_length << endl;
24 cout << "フラグ:" << data_flags << endl;
25 }
26 else
27 {
28 cout << "memcached_get失敗" << endl;
29 }
30
31 memcached_free(cache_client);
32 return 0;
33 }
root@iZwz9aujzgp9b5o38x29akZ:~/memcached_cpp# g++ memcached_connection_test.cpp -lmemcached -o memcached_connection_test.exe
root@iZwz9aujzgp9b5o38x29akZ:~/memcached_cpp# ./memcached_connection_test.exe
キー:username
結果:0
値:john_doe
値の長さ:8
フラグ:0<br></br>