利用MysqlUDF编写Memcached扩展函数

来源:互联网 发布:qq变声软件下载 编辑:程序博客网 时间:2024/06/07 19:23

一、安装Memcached和客户端库LibMemcached

Memcached下载地址:http://memcached.org
LibMemcached下载地址:http://libmemcached.org
(官网有安装方法,略)

二、用C/C++封装方法(如 set方法 和 get方法)

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <string>#include "mysql.h"#include <libmemcached/memcached.h>using namespace std;const char *memServer="127.0.0.1";int memcPort=11211;extern "C" long long memc_set(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)  {        memcached_server_st *servers = NULL;      memcached_st *memc;      memcached_return rc;     char *keyField = (char *)args->args[0]; //cache key add by shenyi     char *valueField =(char *)args->args[1]; //cache value  add by shenyi     int timeField=atoi(args->args[2]); //cache time add by shenyi     memcached_server_st *memcached_servers_parse (char *server_strings);     memc= memcached_create(NULL);     servers= memcached_server_list_append(servers, memServer, memcPort, &rc);     rc= memcached_server_push(memc, servers);     if (rc != MEMCACHED_SUCCESS)    {        strcpy(error,"Couldn't add server");          memcached_free(memc);        return 0;    }     //this is libmemcached set function and params  add by shenyi     rc= memcached_set(memc, keyField, strlen(keyField), valueField, strlen(valueField), (time_t)timeField, (uint32_t)0);     if (rc != MEMCACHED_SUCCESS)     {         strcpy(error,"Couldn't set value");           memcached_server_list_free(servers);         memcached_free(memc);        return 0;     }      memcached_server_list_free(servers);      memcached_free(memc);     return 1;}  extern "C" my_bool memc_set_init(UDF_INIT *initid, UDF_ARGS *args, char *message)  {      if(args->arg_count!=3){        strcpy(            message        ,   "Memc_set expected exactly three arguments,like key value time"        );      // error msg add by shenyi        return 1;    }    return 0;}  extern "C" char *memc_get(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)  {        memcached_server_st *servers = NULL;      memcached_st *memc;      memcached_return rc;      size_t return_key_length;      size_t return_value_length;      char *return_value;       uint32_t flags = 0;     const  char *keyField = (const char *)args->args[0]; //cache key add by shenyi     memcached_server_st *memcached_servers_parse (char *server_strings);     memc= memcached_create(NULL);     servers= memcached_server_list_append(servers, memServer, memcPort, &rc);     rc= memcached_server_push(memc, servers);     //this is libmemcached get function and params  add by shenyi     return_value= memcached_get(memc, keyField,strlen(keyField), &return_value_length,&flags,&rc);    if (rc != MEMCACHED_SUCCESS || return_value==NULL )  //get null value or error add by shenyi     {          memcached_server_list_free(servers);         memcached_free(memc);         return NULL;     }      memcached_server_list_free(servers);      memcached_free(memc);     return return_value;}  extern "C" my_bool memc_get_init(UDF_INIT *initid, UDF_ARGS *args, char *message)  {      if(args->arg_count!=1){        strcpy(            message        ,   "Memc_get expected exactly ono arguments,like memc_get(xx)"        );      // error msg add by shenyi        return 1;    }    return 0;}  

三、编译

g++ -I /usr/include/mysql/ -L /usr/local/lib/ -l memcached -shared -fPIC -o mysql-memc.so mysql-memc.cpp --std=c++0x

四、部署插件

cp mysql-memc.so /usr/lib/mysql/plugin/

五、在 Mysql 中创建函数

CREATE FUNCTION memc_set RETURNS INTEGER SONAME 'mysql-memc.so';CREATE FUNCTION memc_get RETURNS STRING SONAME 'mysql-memc.so';

六、Mysql 操作 Memcached

select memc_set('name','jack','60');select memc_get('name');

#可能遇到的问题

和用UDF编写Redis扩展函数的问题一样,解决方法:
http://blog.csdn.net/txl13109187932/article/details/78885954

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三国忠烈传攻略兵种 一代忠烈杨家将 忠烈杨家将吧 忠烈杨家将在线播放 忠烈杨家将mp4下载 忠烈杨家将bd 忠烈图 忠烈祠 南岳忠烈祠 衡山忠烈祠 麓山忠烈祠 家有忠犬 受前世直到死才发现爱上忠犬 末世美受爱忠犬 忠犬受自愿为奴 类似鸿翼忠犬暗卫受 忠犬受吧 我有一只总裁忠犬受by馨盈 傲娇攻其实是忠犬受 勺年 主仆黑道虐身忠犬受 忠犬民工攻x高傲总裁在线 忠犬攻郑大黑 忠犬攻是怎样养成的 陈康肃公 受人之托忠人之事 忠人之事前一句 与人谋而不忠乎 忠义仁人作品 受人之托忠人之事什么意思 我能看见忠诚度 员工忠诚度调查问卷 提高客户忠诚度的方法 情侣之间应该测试忠诚度吗 忠不必用兮贤不必以 害忠隐贤 忠顺王 忧伤文字吧 彼岸花忧伤唯美古风图片 由爱故生怖,由爱故生忧 无忧贷怎么样 无忧易贷