各位高手好!
小弟有一问题求帮助!
目前在做的项目用到了redis和mysql,同步的时候想到了使用udf建立socket和redis通信进而同步缓存。
经过一番搜索找到了七星高手写的C代码,于是尝试使用。
可是udf怎么调用都不成功。于是在本地IDE里试着模仿udf的调用,从main函数调用用于udf的函数。连接到redis
的socket一点问题都木有,每次都成功 于是乎编译成so扔到plugin文件夹。结果执行还是跳到socket没有连接成功的
那段代码上。
各位高手能不能指点一下。据说udf内不能在函数里新建指针什么的?有这回事么。?调试的时候想写个文件看看,但是只要写上fopen 就提示lost connection。英文文档看了一半实在看不下去了。
小弟有一问题求帮助!
目前在做的项目用到了redis和mysql,同步的时候想到了使用udf建立socket和redis通信进而同步缓存。
经过一番搜索找到了七星高手写的C代码,于是尝试使用。
可是udf怎么调用都不成功。于是在本地IDE里试着模仿udf的调用,从main函数调用用于udf的函数。连接到redis
的socket一点问题都木有,每次都成功 于是乎编译成so扔到plugin文件夹。结果执行还是跳到socket没有连接成功的
那段代码上。
各位高手能不能指点一下。据说udf内不能在函数里新建指针什么的?有这回事么。?调试的时候想写个文件看看,但是只要写上fopen 就提示lost connection。英文文档看了一半实在看不下去了。
struct credis { int fd; struct sockaddr_in addr; }; struct credis *res = NULL; my_bool redis_connect_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if (args->arg_count != 2) { strcpy(message,"Wrong arguments to metaphon; Use the source"); return 1; } args->arg_type[0] = STRING_RESULT; args->arg_type[1] = INT_RESULT; initid->ptr = NULL; return 0; } char *redis_connect(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { uint16_t port; FILE *fp; if(res != NULL) { credis_close(res); } port = *((ushort*) args->args[1]); res = credis_connect(args->args[0], port); if (res == NULL) { *length = 60; fp = fopen("/home/result.log", "a"); fprintf(fp, "this is log"); fclose(fp); return "Error connecting to Redis server. Please start server to run"; //在mysql中调用的时候一直运行这个return。 } fp = fopen("/home/result.log", "a"); fprintf(fp, "this is log"); fclose(fp); *length = 2; return "OK";//写个main函数本地调试的时候每次都成功 } struct credis *credis_connect(char *host, uint16_t port) { struct timeval timeout; struct credis *redis; redis = (struct credis *)malloc(sizeof(struct credis)); if(redis == NULL) return NULL; redis->fd = socket(AF_INET, SOCK_STREAM, 0); redis->addr.sin_family = AF_INET; redis->addr.sin_port = htons(port); redis->addr.sin_addr.s_addr = inet_addr(host); timeout.tv_sec = 5; timeout.tv_usec = 0; setsockopt(redis->fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)); setsockopt(redis->fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)); if(connect(redis->fd, (struct sockaddr *)&redis->addr, sizeof(struct sockaddr)) == -1) { safe_free(redis); return NULL; } return redis; }
解决方案
60
lost connection没有这个提示的代码?
换了个环境就好了,是什么环境换了?
使用udf建立socket和redis通信进而同步缓存,是将缓存的同步到数据库,还是反过来?
换了个环境就好了,是什么环境换了?
使用udf建立socket和redis通信进而同步缓存,是将缓存的同步到数据库,还是反过来?