図1に示すように、分散ロック・テスト・コードをhiredis
書式#include <stdio.hに> する#include <stdlib.h>に含ま する#include < 文字列の.h> 書式#include <unistd.h> の#include <TIME.H> 書式#include <hiredis.h> / * の#define REDIS_REPLY_STRING 1 の#define REDIS_REPLY_ARRAY 2 の#define REDIS_REPLY_INTEGER 3 の#define REDIS_REPLY_NIL 4 の#define REDIS_REPLY_STATUS 5 の#define REDIS_REPLY_ERROR 6 * / int型のmain(int型 ARGC、チャー ** ARGV){ 符号なしのint J。 redisContext * C; redisReply* 返信。 const のchar *ホスト名=(のargc> 1)?ARGV [ 1 ]:" 127.0.0.1 " 。 int型ポート=(のargc> 2)?ATOI(ARGV [ 2 ]):6379 。 構造体体timevalタイムアウト= { 1、500000 }。// 1.5秒 C = redisConnectWithTimeout(ホスト名、ポート、タイムアウト); もし(C == NULL || C-> ERR){ 場合(C){ のprintf("接続エラー:%S \ n "C-> errstrは); redisFree(C); } 他{ のprintf(" 接続エラー:Redisのコンテキストを割り当てることができない\ n " ); } 出口(1 ); } // * *********************セットロック********************** にsrand((符号なし)時間(NULL)); INT randomvalue =ランド()%1000000 ; チャー S [ 10 ]; sprintfの(S、" %のD "、randomvalue)。 ながら、(1 ) { 返信 = redisCommand(C、" セットロック%d個のEX%D NX "、randomvalue、20)。 // 20S のprintf(" SETロック:タイプ=%dの整数=%LLD、STR =%S \ n "、reply->タイプ、reply->整数、reply-> STR)。 もし(reply->タイプ!= REDIS_REPLY_NIL &&のstrcmp(reply-> STR、" OK ")== 0 ){ のprintf(" SETロックOK \ nは"); freeReplyObject(返信)。 休憩; } 他{ printf関数は、(" セットロックが失敗した\ n " ); freeReplyObject(返信)。 睡眠(1 )。 続け; } } // ********************************************** ******* // **********************プロセス****************** **** // ロック取得 応答= redisCommand(C、" GETロックを"); printf(" GETロック:整数=%LLD、STR =%S \ n "、reply->整数、reply-> STR)。 freeReplyObject(返信)。 // TTLロック 応答= redisCommand(C、" TTLロック" )。 printf(" TTLロック:整数=%LLD、STR =%S \ n "、reply->整数、reply-> STR)。 freeReplyObject(返信)。 睡眠(5 ); // ************************************************ ***** // **********************・デル・ロック******************* ** 返信= redisCommand(C、"GETロック" ); 場合(のstrcmp(reply-> STR、S)== 0 ){ 返信 = redisCommand(C、" DELロック" ); のprintf(" DELロック:整数=%LLD、STR =%S \ nは"、reply->整数、reply-> STR); } freeReplyObject(返信); // ***************************** ************************ // 切断及び解放し、コンテキスト redisFree(C); 戻り 0 ; }
2、テスト出力
(1)反復clie1
SETのロック:種類= 5、整数= 0、STR = OK SETのロックOK GETのロック:整数= 0、STR = 397618 TTLのロック:整数= 20、STR =(NULL ) DELのロック:整数= 1、STR =(NULL)
(2)反復clie2
SETのロック:種類= 4、整数= 0、STR =(ヌル) セットの ロックに失敗しました SETのロック:種類= 4、整数= 0、STR =(ヌル) セットの ロックが失敗した SETのロック:種類= 4、整数= 0、STR =(ヌル) セットの ロックに失敗しました SETのロック:種類= 4 =、整数0は、STR =(ヌル) セットの ロックが失敗しました SETロック:種類= 5、整数= 0、STR = OK SETのロックOK GETのロック:整数= 0、STR = 763395 TTLのロック:整数= 20、STR =(NULL ) DELのロック:整数= 1、STR =(NULL)