mysql UDF同步redis資料

2021-09-01 10:33:59 字數 1816 閱讀 6443

需求:redis快取是乙個實用的nosql資料庫,但是有時候專案需要redis和資料庫中的資料同步  mysql的udf函式是乙個不錯的方案。事先準備好mysql,redis(都是基於linux版的)。

找到以下幾個目錄:

開始寫**:

my_udf.c

#include #include #include #include #include #include #include #include #if defined(_win32) || defined(_win64) || defined(__win32__) || defined(win32)

#define dllexp __declspec(dllexport)

#else

#define dllexp

#endif

/* 自定義的函式 */

dllexp long long udf_add(udf_init *initid, udf_args *args, char *is_null, char *error);

/* 對應自定義函式的初始化和結束的函式,在呼叫udf_add函式時由系統呼叫 */

dllexp my_bool udf_add_init(udf_init *initid, udf_args *args, char *message);

dllexp void udf_add_deinit(udf_init *initid);

long long udf_add(udf_init *initid, udf_args *args, char *is_null, char *error)

redisreply* reply = rediscommand(conn, "auth 123456");

freereplyobject(reply);

reply = rediscommand(conn,(char*)(args->args[0]));

freereplyobject(reply);

//redisfree(conn);

return 10;}

my_bool udf_add_init(udf_init *initid, udf_args *args, char *message)

void udf_add_deinit(udf_init *initid)

makefile

libdir=/usr/lib/mysql/plugin

install:

gcc -wall -fpic -i/usr/include/mysql/ -i/usr/include/mysql/mysql -i. -shared my_udf.c -o $/my_udf.so /usr/local/lib/libhiredis.a

資料庫中新增函式

#create function udf_add returns integer soname 'my_udf.so';

select udf_add();

drop function if exists udf_add;

然後編寫對應的觸發器就可以

MySQL UDF除錯方式debugview

函式 sprintf include 掛接windows api 省略 char stdcall my name udf init initid,udf args args,char is null,char error sprintf debugermsg,s me outputdebugstri...

mysql udf 執行命令 mylab sys

有時候為了方便,利用event trigger呼叫系統外部命令,可因為安全問題,mysql自身並沒有提供相關命令,這裡提供個呼叫系統命令的自定義函式mylab sys exec 載入 createfunctionmylab sys exec returns integersoname mylab s...

Redis主從同步

redis分布式模型,在cap定理中,使用了ap的模型,即保證了可用性與分割槽容錯。redis採用了base最終一致性原理,來保證最終資料的一致,即可以允許出現資料不一致的狀態。redis使用指令流的方式 類似aof指令 進行同步資訊,主節點一邊傳送指令至從節點,從節點一遍執行該指令,一邊將自己的同...