19.1.1 キャッシュへのアクセスとデータ操作の流れ
キャッシュへのアクセスとデータ操作の流れについて説明します。
- 〈この項の構成〉
(1) C言語を使用する場合のソースプログラムの例
C言語を使用する場合のソースプログラムの例(keyとvalueを格納する場合)を次に示します。
#include <stdio.h> #include <string.h> #include <eads.h> int main(int argc, char **argv) { int ret = 0; int error_code = 0; char CONFPATH[] = "./conf/eads_sample_client.properties"; char CACHENAME[] = "cache1"; char KEY[] = "key1"; char VALUE[] = "value1"; EAD_CACHE_MANAGER* cmp = NULL; EAD_CACHE *cp = NULL; ead_value_element value_element; value_element.value = (void *)VALUE; value_element.value_size = strlen(VALUE) + 1; /* EADSクライアントの初期設定をする */ cmp = ead_init_client(CONFPATH, &error_code); printf("ead_init_client() done. (error_code = %d)\n", error_code); if (error_code != EAD_OK) { return 1; } /* キャッシュへのアクセスを開始する */ cp = ead_start_cache(cmp, CACHENAME, &error_code); printf("ead_start_cache() done. (error_code = %d)\n", error_code); if (error_code != EAD_OK) { /* EADSクライアントを終了する場合 */ goto ERR; } /* keyとvalueを格納する */ ead_put(cp, KEY, &value_element, &error_code); printf("ead_put() done. (error_code = %d)\n", error_code); if (error_code != EAD_OK) { /* EADSクライアントを終了する場合 */ goto ERR; } /* キャッシュへのアクセスを終了する */ ead_stop_cache(cp, &error_code); cp = NULL; printf("ead_stop_cache() done. (error_code = %d)\n", error_code); if (error_code != EAD_OK) { /* EADSクライアントを終了する場合 */ goto ERR; } /* EADSクライアントを終了する */ ead_terminate_client(cmp, &error_code); cmp = NULL; printf("ead_terminate_client() done. (error_code = %d)\n", error_code); if (error_code != EAD_OK) { /* EADSクライアントを終了する場合 */ goto ERR; } return 0; ERR: if(cp != NULL) { /* キャッシュへのアクセスを終了する */ ead_stop_cache(cp, &error_code); cp = NULL; printf("ead_stop_cache() done. (error_code = %d)\n", error_code); } if(cmp != NULL) { /* EADSクライアントを終了する */ ead_terminate_client(cmp, &error_code); cmp = NULL; printf("ead_terminate_client() done. (error_code = %d)\n", error_code); } return 1; }
(2) EADSクライアントの初期設定をする
EADSクライアントの初期設定をするには,ead_init_client()またはead_init_client_n()を使用します。また,キャッシュを管理するキャッシュマネージャのハンドル(ポインタ)を取得します。
クライアント定義に従って,接続先EADSサーバなどが設定されます。
複数のクラスタと同時に接続するなど,設定の異なる複数のキャッシュマネージャを同時に使用したい場合は,クライアント定義を変更してead_init_client()またはead_init_client_n()を複数回実行します。複数回実行した場合は,取得した各キャッシュマネージャのハンドルに対してead_terminate_client()を実行して,EADSクライアントを終了してください。
(3) キャッシュへのアクセスを開始する
EADSクライアントの初期設定が完了したら,キャッシュへのアクセスを開始します。
キャッシュへのアクセスを開始するには,ead_start_cache()を使用して,キャッシュへのアクセスを制御するためのハンドル(ポインタ)を取得します。このハンドルを使用することによって,キャッシュにアクセスできるようになります。
(4) keyとvalueを格納する
キャッシュにkeyとvalueを格納するには,ead_put()を使用します。
ead_put()には,ead_start_cache()で取得したキャッシュのハンドルを指定します。また,キャッシュに格納するkeyとvalue情報(valueとvalueのサイズ)を指定します。value情報はead_value_element構造体として用意します。
(5) valueを取得する
キャッシュからvalueを取得するには,ead_get()を使用します。
ead_get()には,ead_start_cache()で取得したキャッシュのハンドルを指定します。また,取得するvalueに関連づけられたkeyを指定します。
ead_get()によってvalueの取得が成功すると,keyに関連づけられたvalue情報がead_value_element構造体として返却されます。
なお,戻り値として返却されたvalueのメモリ領域は,自動的に解放されません。メモリ領域の解放については,「19.1.1(10) 戻り値として返却されたメモリ領域を解放する」を参照してください。
valueを取得する場合のソースプログラムの例を次に示します。
ソースプログラムの例(valueを取得する場合)
{ /* valueを取得する */ ead_value_element ret_value; char KEY[] = "key1"; ret_value = ead_get(cp, KEY, &error_code); printf("ead_get() done. (error_code = %d)\n", error_code); if (error_code != EAD_OK) { /* EADSクライアントを終了する場合 */ goto ERR; } /* 取得成功,取得したvalueは使用後に解放する */ freeValue(&ret_value); }
(6) keyとvalueを削除する
キャッシュから指定したkey,およびkeyに関連づけられたvalueを削除するには,ead_remove()を使用します。
ead_remove()には,ead_start_cache()で取得したキャッシュのハンドルを指定します。また,削除するvalueに関連づけられたkeyを指定します。
(7) ユーザファンクションを実行する
(a) keyまたはグループ指定による実行方法
keyまたはグループを指定してユーザファンクションを実行するには,ead_execute_function()を使用します。
ead_execute_function()には,ead_start_cache()で取得したキャッシュのハンドルを指定します。
また,ユーザファンクションを実行するkeyまたはグループ名と,実行するユーザファンクション名を指定します。
また,ユーザファンクションに指定する引数をead_object構造体として指定します。
ead_execute_function()によってユーザファンクションが実行されると,ユーザファンクションの実行結果がead_object構造体として返却されます。
(b) EADSサーバ指定による実行方法
EADSサーバを指定してユーザファンクションを実行するには,ead_execute_node_function()を使用します。
ead_execute_node_function()には,ead_start_cache()で取得したキャッシュのハンドルを指定します。
また,ユーザファンクションを実行するEADSサーバをead_node構造体として,ユーザファンクションに指定する引数をead_object構造体として指定します。
また,実行するユーザファンクション名を指定します。
ead_execute_node_function()によってユーザファンクションが実行されると,ユーザファンクションの実行結果がead_object構造体として返却されます。
(8) キャッシュへのアクセスを終了する
キャッシュへのアクセスを終了するには,ead_stop_cache()を使用します。
ead_stop_cache()には,ead_start_cache()で取得したキャッシュのハンドルを指定します。
(9) EADSクライアントを終了する
EADSクライアントを終了するには,ead_terminate_client()を使用します。
ead_terminate_client()には,ead_init_client()またはead_init_client_n()で取得したキャッシュマネージャのハンドルを指定します。
(10) 戻り値として返却されたメモリ領域を解放する
ead_get()の戻り値として返却されたvalueのメモリ領域は,自動的に解放されません。次のような関数を定義して,APで解放してください。
/* 戻り値として返却されたメモリ領域を解放する */ void freeValue(ead_value_element *value) { if (value->value != NULL) { free(value->value); value->value = NULL; } value->value_size = 0; }
戻り値として返却されたメモリ領域をAPで解放する必要がある関数を次の表に示します。次の表に示す各関数の解放対象(戻り値)がNULLでない場合は,戻り値を使用しなくなったタイミングで,メモリ領域を解放してください。
項番 |
関数名 |
解放対象となる戻り値 |
---|---|---|
1 |
ead_get_cache_name() |
キャッシュ名として返却されるchar型のポインタ |
2 |
ead_put_all() |
ead_put_all_results構造体のfailure_infoメンバ |
3 |
ead_get() |
ead_value_element構造体のvalueメンバ |
4 |
ead_get_group() |
ead_get_group_results構造体の次に示すメンバ
|
5 |
ead_get_all() |
ead_get_all_results構造体の次に示すメンバ
|
6 |
ead_remove_all() |
ead_remove_all_results構造体のfailure_infoメンバ |
7 |
ead_get_group_names() |
ead_group_names構造体のgroup_namesメンバ |
8 |
ead_get_group_keys() |
ead_keys構造体のkeysメンバ |
9 |
ead_get_node_keys() |
|
10 |
ead_get_group_first_key() |
keyとして返却されたchar型のポインタ |
11 |
ead_get_node_first_key() |
|
12 |
ead_get_group_next_key() |
|
13 |
ead_get_node_next_key() |
|
14 |
ead_execute_function() |
ユーザファンクションの実行結果として返却されたead_object構造体のobjectメンバ |
15 |
ead_execute_function_rt() |
|
16 |
ead_execute_node_function() |
|
17 |
ead_execute_node_function_rt() |
|
18 |
ead_get_nodelist() |
ead_nodelist構造体のnodesメンバ |
19 |
ead_get_slave_nodelist() |
|
20 |
ead_add_cluster_eventlistener() |
|
21 |
ead_add_node_eventlistener() |