热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » MySQL/MSSQL编程 » 将MySQL数据映射到Memcached中

将MySQL数据映射到Memcached中

论坛链接
  • 将MySQL数据映射到Memcached中
  • 发布时间:2009-07-26 22:54:24    浏览数:8351    发布者:superadmin    设置字体【   
作者:张立冰
出处:http://www.libing.name/2009/02/0 ... a-to-memcached.html

测试环境在Linux下进行,版本系统为CentOS5.
以下为相关软件,包括其版本和下载地址:

mysql-5.1.30 下载
memcached-1.2.6 下载
libevent-1.4.7-stable 下载
memcached_functions_mysql-0.8 下载
libmemcached-0.26 下载


编译安装MySQL,安装因个人细好而定,省略许多与测试无关的编译细节及参数。

[root@localhost ~]#tar xzf mysql-5.1.30.tar_001.gz[root@localhost ~]#cd mysql-5.1.30[root@localhost ~]#./configure --prefix=/usr/local/mysql51[root@localhost ~]#make[root@localhost ~]#make install[root@localhost ~]#./scripts/mysql_install_db --user=mysql --skip-name-resolve[root@localhost ~]#/usr/local/mysql51/bin/mysqld_safe省略列出安装memcached和libevent的相关命令,具体可按照实际情况安装,测试时我将libevent默认安装,memcached安装于/usr/local/memcached目录下。
启动memcached.

/usr/local/memcached/bin/memcached -d -m 50 -u root -p 11211编译安装libmemcache.

[root@localhost ~]#tar xzf libmemcached-0.26.tar.gz[root@localhost ~]#cd libmemcached-0.26[root@localhost ~]#./configure --with-memcached=/usr/local/memcached/bin/memcached[root@localhost ~]# make && make install编译安装Memcache UDFs for MySQL.

[root@localhost ~]# tar xzf memcached_functions_mysql-0.8.tar.gz[root@localhost ~]# cd memcached_functions_mysql-0.8[root@localhost ~]# ./configure --with-mysql-config=/usr/local/mysql51/bin/mysql_config[root@localhost ~]# make && make install编译完成后将编译好的库文件复制到mysql的插件目录下,以便于加载使用。

cp /usr/local/lib/libmemcached_functions_mysql* /usr/local/mysql51/lib/mysql/plugin/进入memcached_functions_mysql的源码目录,在目录下有相关添加UDF的SQL文件用于初始化。

[root@localhost ~]# mysql <sql/install_functions.sql注:如果对这些UDFs不熟悉或者不懂,可进行源码目录参看README,里边有相应的说明。

至此,相关软件的编译和安装完成,进行测试,我们要达到的目的是当MySQL有新记录插入时,同时插入到Memcached中,当记录更新时同步更 新Memcached中的记录,删除时同时也删除Memcached相关的记录,为此创建三个触发器来实现,如果对MySQL的触发程序不熟悉可以参考 MySQL手册第21章,下面SQL中的memcached为需要操作的表名,SQL如下:

#插入数据时插入Memcachedcreate trigger mysqlmmci after insert on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);#更新记录时更新Memcachedcreate trigger mysqlmmcu after update on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);#删除记录时删除Memcached相应的记录create trigger mysqlmmcd before delete on memcached for each row set @tmp = memc_delete(OLD.key);以下为测试记录,在对MySQL操作的同时操作Memcached来查看情况,当然你也可以在启动Memcached的时候带-vv参数来查看相关信息.

MySQL操作相关的记录:

[root@localhost ~]#mysql -S /tmp/mysql51.sock Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.1.30 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use test;Database changed mysql> create table `memcached` (`key` varchar(10), `value` varchar(100)); Query OK, 0 rows affected (0.00 sec) mysql> create trigger mysqlmmci after insert on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);Query OK, 0 rows affected (0.00 sec) mysql> create trigger mysqlmmcu after update on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);Query OK, 0 rows affected (0.00 sec) mysql> create trigger mysqlmmcd before delete on memcached for each row set @tmp = memc_delete(OLD.key);Query OK, 0 rows affected (0.00 sec) mysql> insert into memcached values("keyi", "valuei"),("keyu","valueu"),("keyd", "valued"); Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0 mysql> update memcached set `value`="update" where `key`="keyu";Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0 mysql> delete from memcached where `key`="keyd";Query OK, 1 row affected (0.00 sec) mysql> quitByeMemcache查看时的记录:

[root@localhost ~]#telnet 127.0.0.1 11211Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.get keyiVALUE keyi 0 6valueiENDget keyuVALUE keyu 0 6valueuENDget keydVALUE keyd 0 6valuedENDget keyuVALUE keyu 0 6updateENDget keydENDquitConnection closed by foreign host.至此,我们基本实现的将MySQL的数据同步到Memcached中,性能暂时还没有测试,当然上面只是简单的实现的数据映射的功能,如果在实现的 生产环境中,则需要考虑名字空间,高可靠性的问题,这些都是可以通过数据库名-表名-关键字的方面能达到KEY唯一的目的,而高可靠性则是一个比较大的问 题。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理