21.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のメモリ領域は,自動的に解放されません。メモリ領域の解放については,「(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) グループ指定による実行方法
グループを指定してユーザファンクションを実行するには,ead_execute_function()を使用します。
ead_execute_function()には,ead_start_cache()で取得したキャッシュのハンドルを指定します。
また,ユーザファンクションを実行するグループ名と,実行するユーザファンクション名を指定します。
また,ユーザファンクションに指定する引数を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で解放してください。
-
ユーザファンクションを実行し,ユーザファンクションの実行結果として返却されたead_object構造体のobjectメンバがNULLでない場合
-
ead_get_nodelist(),またはead_get_slave_nodelist()の戻り値として返却されたead_nodelist構造体のnodesメンバがNULLでない場合