原理:
首先安裝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...