需求:redis缓存是一个实用的NOSQL数据库,但是有时候项目需要redis和数据库中的数据同步 mysql的UDF函数是一个不错的方案。事先准备好mysql,redis(都是基于linux版的)。
找到以下几个目录:



开始写代码:
my_udf.c
#include <my_global.h>
#include <my_sys.h>
#include <mysql.h>
#include <m_ctype.h>
#include <m_string.h>
#include <stdlib.h>
#include <ctype.h>
#include <hiredis/hiredis.h>
#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)
{
redisContext* conn = redisConnect("127.0.0.1", 6379);
if(conn->err)
{
return -1;
}
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)
{
return 0;
}
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 ${LIBDIR}/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)与Redis进行数据交互,通过编写C语言代码实现MySQL调用Redis的功能,包括连接Redis、执行命令等,并提供了Makefile配置和函数注册、调用的详细步骤。
1054

被折叠的 条评论
为什么被折叠?



