C語言redis集群客戶端

2021-09-25 23:48:21 字數 1970 閱讀 3604

原理:

首先安裝hiredis,在此之前要確定安裝了gcc.

單機版連線參考**:

根據之前的單機版實現,連線redis集群中任意例項,當像其中存入key時,會告訴你這個kay對應的槽和ip與埠。

程式輸出:

對應的槽

ip :

可以根據cluster keyslot key命令來驗證,圖中分別存入的是1,2,3

redis-cli截圖

現在就很清楚,只要能從集群返回來的資訊中擷取到ip和埠就能儲存進去redis集群

redis集群中key對應槽的計算:

linux下把redis安裝包解壓後在解壓目錄下有乙個src目錄。crc16.c中就是redis使用到的crc校驗函式,對校驗的值取餘16384

就得到對應的槽值

**都在

main.c

中,已測試

redis

集群中儲存。

問題:頻繁的斷開和重連

redis

集群宕機的是當前連線的這台,需要重現連線一台

#include #include #include //會使用到so的動態庫

#include #include //#include "crc64.h" //在reids解壓目錄下的src目錄下

#define hash_slot 16384

//redis結構體,儲存當前連線reids的資訊

struct redis

;//全域性變數

struct redis gredis;

//獲取變數

struct redis* redis_malloc()

//初始化

bool redis_init(struct redis *predis,char* ip,int port)

predis->mport=port;

strcpy(predis->mip,ip);

predis->conn = redisconnect(ip,port);

if(predis->conn->err)

return true;

}//寫入reids,如果寫入redis與當前連線的redis不對應,切換

bool redis_write(struct redis *predis,char* key,char *value)

freereplyobject(predis->reply);

return true;

}//斷開連線

bool redis_clear(struct redis *predis)

//顯示當前連線的redis的埠和ip

void redis_show(struct redis *predis)

//返回對應的槽值,使用了crc16.c檔案,在redis解壓檔案src資料夾下

unsigned int get16crc(unsigned char *key)

int main()

int a=1;

char key[100]="";

char val[100]="";

for(a=0;a<10;a++)

redis_show(predis);

redis_clear(predis);

printf("eop!\n");

return 0;

}

Redis 客戶端連線

redis 通過監聽乙個 tcp 埠或者 unix socket 的方式來接收來自客戶端的連線,當乙個連線建立後,redis 內部會進行以下一些操作 在 redis2.4 中,最大連線數是被直接硬編碼在 裡面的,而在2.6版本中這個值變成可配置的。maxclients 的預設值是 10000,你也可...

Redis 客戶端連線

在 redis2.4 中,最大連線數是被直接硬編碼在 裡面的,而在2.6版本中這個值變成可配置的。maxclients 的預設值是 10000,你也可以在 redis.conf 中對這個值進行修改。config getmaxclients 1 maxclients 2 10000 以下例項我們在服務...

Redis 客戶端連線

redis 客戶端連線 redis 通過監聽乙個 tcp 埠或者 unix socket 的方式來接收來自客戶端的連線,當乙個連線建立後,redis 最大連線數 在redis2.4 中,最大連線數是被直接硬編碼在 裡面的,而在 2.6版本中這個值變成可配置的。maxclients 的預設值是 100...