mysql UDF同步redis数据

本文介绍如何使用MySQL的用户定义函数(UDF)与Redis进行数据交互,通过编写C语言代码实现MySQL调用Redis的功能,包括连接Redis、执行命令等,并提供了Makefile配置和函数注册、调用的详细步骤。

需求: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;

然后编写对应的触发器就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值