Memcached与MySQL数据同步

1、介绍

  在生产条件中,大家平日使用MySQL作为利用的数据库。但是随着客商的扩大数据量的附加,我们将会放任自流的精选Memcached作为缓存数据库,进而减小MySQL的下压力。可是memcached在客户、应用与MySQL三者中保险着多少同步也是一个十分大的工程。

  举个例子顾客从memcached缓存中换取某数码,何况实践删除命令。它须求到MySQL中除去,之后还须求统一计划一个主次将Memcached与之相应的数额也删除掉。

  就算大家能够实现在MySQL中增加和删除改时都能够活动触发删除memcached中相应的数码,那岂不美滋滋呀。那本来能够产生啦,我们将采取选择MySQL
Memcached UDF(User Defined Functions)方法。

  mysql memcached UDF
其实正是经过libmemcached来利用memcache的一文山会海函数,通过这个函数,你能
对memcache实行get, set, cas, append, prepend, delete, increment,
decrement objects操作,若是大家通过mysql
trigger来使用那一个函数,那么就会经过mysql更加好的,更自动的保管memcache!

 

Memcached与MySQL数据同步,memcachedmysql

2、软件下载与安装

1、介绍

  在生养条件中,大家日常使用MySQL作为利用的数据库。可是随着客户的扩张数据量的叠合,大家将会大势所趋的取舍Memcached作为缓存数据库,进而减小MySQL的下压力。不过memcached在顾客、应用与MySQL三者中保持着多少同步也是三个极大的工程。

  比方客商从memcached缓存中换取某数码,况且施行删除命令。它要求到MySQL中除去,之后还须要设计一个主次将Memcached与之对应的数目也删除掉。

  即使大家能够做到在MySQL中增加和删除改时都能够自行触发删除memcached中相应的数量,那岂不美滋滋呀。那自然能够成功啦,我们将应用选拔MySQL
Memcached UDF(User Defined Functions)方法。

  mysql memcached UDF
其实正是经过libmemcached来利用memcache的一文山会海函数,通过这几个函数,你能
对memcache进行get, set, cas, append, prepend, delete, increment,
decrement objects操作,若是大家通过mysql
trigger来使用这几个函数,那么就能够经过mysql越来越好的,更自动的治本memcache!

 

  2.1、软件下载

  供给采纳的软件又四个,libmemcached以及memcached_functions_mysql

冠亚体育手机网站,  百度云下载链接: 密码:fks8

  网络找的下载网址:

2、软件下载与安装

  2.2、软件设置

  简介:

  那四个软件的安装比较蛋疼,究竟是开源软件,哪个版本重视哪个版本,哪个版本不与哪版本个十一分。当时自己设置这多个软件用了二个中午光阴。因为事先自个儿在装置PHP中memcached扩充模块须求借助那一个软件库,所以安装了三个风尚版本libmemcached-1.0.18,由此能够运用PHP的memcached扩充模块中的全体机能。、

  可是在装置memcached_functions_mysql时,就显示很蛋疼了。

  一初始本人一向设置memcached_functions_mysql-1.1,到make的时候就出现下边包车型大巴一无所能。

servers.c:122: error:
‘memcached_st’ has no member named ‘hosts’
servers.c:123: error:
‘memcached_st’ has no member named ‘hosts’
servers.c:124: error:
‘memcached_st’ has no member named ‘hosts’
servers.c:126: error:
‘memcached_st’ has no member named ‘hosts’

……

那是什么样原因吧?

  这正是上面所涉嫌软件包容难点。

  后来在网络看到正是memcached_functions_mysql-1.1那些本子配对libmemcached-0.37版本以上都会冒出这种主题材料。

  接着本身就张开壹回又三次测量检验:

  Libmemcached(1.0.2、1.0.3、1.0.18、0.34、0.36版本)+
memcached_functions_mysql-1.1举行设置。结果成功的唯有0.34、0.36版本。

  因为自己想要保障相对较高版本的libmemcached,因为低版本的不协理PHP的memcached扩张模块的局地新职能。

  既然memcached_functions_mysql-1.1版本不能够对应libmemcached的高版本,那么小编就退而求其次,使用memcached_functions_mysql-0.9咯。

  百度了好久好久没找着,最终在国外的网址github中找到。

  接着实行memcached_functions_mysql-0.9的安装测量检验,结果恐怕倒霉好。

  忽然灵光一闪,这小编就设置七个libmemcached咯,叁个1.0.18版本,八个0.34版本。最终大功告成安装。(libmemcached-0.34与memcached_functions_mysql-1.1配对举行设置)

1):安装libmemcached-0.34

参考

2):安装memcached_functions_mysql-1.1

#tar zxvf memcached_functions_mysql-1.1.tar.gz
#cd memcached_functions_mysql-1.1
#./configure --with-mysql=/usr/local/mysql/bin/mysql_config --with-libmemcached=/usr/local/libmemcached
#make
#make install

 

3):拷贝lib文件到mysql的plugin下面

# cp /usr/local/lib/libmemcached_functions_mysql.* /usr/local/mysql/lib/plugin/

 

4)往MySQL添加memcache UDF函数

合计有二种艺术:

1、在MySQL里执行 source install_functions.sql

mysql>source /home/username/(memcached_functions_mysql-1.1源码路径)/sql/ install_functions.sql

 

2、在linux主机施行mysql <sql/install_functions.sql

#/usr/local/mysql/bin/mysql < /home/username/(memcached_functions_mysql-1.1源码路径)/sql/ install_functions.sql

 

5):检查增多函数是或不是成功

mysql>select * from mysql.func;

 

冠亚体育手机网站 1

结果显示有非常多函数,表示增添函数成功

注意:

1、必供给含有–with-libmemcached,不然就能够展现找不到libmemcached

2、有个小细节,正是时有时无开展设置卸载libmemcached时(即–prefix有设置同一的名字),尽管有–with-libmemcached准确的门径,也是有相当大概率会议及展览示找不到libmemcached。

消除:能够动用不一致的名字(–prefix);可能重启linux

 

  2.1、软件下载

  要求运用的软件又多个,libmemcached以及memcached_functions_mysql

  百度云下载链接: 密码:fks8

  互连网找的下载网站:

3、功效介绍

  从select * from
mysql.func;的结果中大家得以见到众多有关memcached的函数。驾驭memcached指令的同班一眼看千古就可见领略那么些函数的大致功用。memc_set、memc_get这不正是出色set与get命令嘛。

实际功效可参看文书档案:

简易测量试验一下这几个函数:

#测试前当然要先将MySQL与memcached建立连接啦!
mysql> select memc_servers_set('192.168.95.11:11211');
mysql> select memc_server_count();
mysql> select memc_set('m','llppppp');
mysql> select memc_get('m');

冠亚体育手机网站 2

telnet 192.168.95.11 11211

冠亚体育手机网站 3

 

  2.2、软件设置

  简介:

  那多个软件的安装比较蛋疼,究竟是开源软件,哪个版本正视哪个版本,哪个版本不与哪版本个特别。当时本身设置那多个软件用了二个上午光阴。因为事先本身在装置PHP中memcached扩张模块须求借助这么些软件库,所以安装了三个最新版本libmemcached-1.0.18,由此能够使用PHP的memcached扩充模块中的全数机能。、

  但是在装置memcached_functions_mysql时,就展现很蛋疼了。

  一起先小编一贯设置memcached_functions_mysql-1.1,到make的时候就应际而生上边包车型地铁失实。

servers.c:122: error: ‘memcached_st’ has no member named ‘hosts’
servers.c:123: error: ‘memcached_st’ has no member named ‘hosts’
servers.c:124: error: ‘memcached_st’ has no member named ‘hosts’
servers.c:126: error: ‘memcached_st’ has no member named ‘hosts’

……

那是什么原因吧?

  那正是下面所波及软件包容难点。

  后来在网络来看就是memcached_functions_mysql-1.1那么些本子配对libmemcached-0.37本子以上都会产出这种主题材料。

  接着作者就进展贰次又三次测量检验:

  Libmemcached(1.0.2、1.0.3、1.0.18、0.34、0.36版本)+
memcached_functions_mysql-1.1实行安装。结果成功的只有0.34、0.36本子。

  因为本身想要保险相对较高版本的libmemcached,因为低版本的不协理PHP的memcached扩张模块的一部分新职能。

  既然memcached_functions_mysql-1.1版本不可能对应libmemcached的高版本,那么小编就退而求其次,使用memcached_functions_mysql-0.9咯。

  百度了好久好久没找着,最后在外国的网址github中找到。

  接着举行memcached_functions_mysql-0.9的安装测量检验,结果依然不美貌。

  遽然灵光一闪,那小编就安装四个libmemcached咯,叁个1.0.18版本,贰个0.34本子。最后水到渠成安装。(libmemcached-0.34与memcached_functions_mysql-1.1配成对拓宽安装)

1):安装libmemcached-0.34

参考

2):安装memcached_functions_mysql-1.1

#tar zxvf memcached_functions_mysql-1.1.tar.gz
#cd memcached_functions_mysql-1.1
#./configure --with-mysql=/usr/local/mysql/bin/mysql_config --with-libmemcached =/usr/local/libmemcached
#make
#make install

 

3):拷贝lib文件到mysql的plugin下面

# cp /usr/local/lib/libmemcached_functions_mysql.* /usr/local/mysql/lib/plugin/

 

4)往MySQL添加memcache UDF函数

计算有两种方法:

1、在MySQL里执行 source install_functions.sql

mysql>source /home/username/(memcached_functions_mysql-1.1源码路径)/sql/ install_functions.sql

 

2、在linux主机施行mysql <sql/install_functions.sql

#/usr/local/mysql/bin/mysql < /home/username/(memcached_functions_mysql-1.1源码路径)/sql/ install_functions.sql

 

5):检查加多函数是或不是中标

mysql>select * from mysql.func;

 

冠亚体育手机网站 4

结果显示有那多少个函数,表示增加函数成功

注意:

1、必须求包罗–with-libmemcached,否则就能来得找不到libmemcached

2、有个小细节,就是常事实行设置卸载libmemcached时(即–prefix有设置同一的名字),即便有–with-libmemcached正确的门道,也许有不小概率会显得找不到libmemcached。

消除:能够使用分化的名字(–prefix);恐怕重启linux

 

4、实例测量检验

1、新建三个数据库test233以及表tab1

冠亚体育手机网站 5

冠亚体育手机网站 6

2、建构多个触发器

插入数据:
mysql>delimiter $
mysql>create trigger tab1_insert_memc
    -> before insert on tab1
    -> for each row begin
    -> set @m=memc_set(NEW.id,NEW.name);   
    -> end$
更新数据:
mysql> create trigger tab1_update_memc
    ->before update on tab1
    -> for each row begin
    -> set @m=memc_replace(OLD.id,NEW.name);   
    -> end$
删除数据:
mysql> create trigger tab1_delete_memc
    -> before delete on tab1 
    -> for each row begin
    -> set @m=memc_delete(OLD.id);
    -> end$
mysql>delimiter ;

冠亚体育手机网站 7

冠亚体育手机网站 8

3、连接memcached服务器实行数据测验

mysql> select memc_servers_set('192.168.95.11:11211');

1)、向tab1插入几条数据,并查阅结果

mysql> insert into tab1 value('1','1111aaaaff');
.......

冠亚体育手机网站 9

冠亚体育手机网站 10

telnet 192.168.95.11 11211

冠亚体育手机网站 11

2)、更换数据

mysql> update tab1 set name='ooooooooooooooo' where id=1;

冠亚体育手机网站 12

telnet 192.168.95.11 11211

冠亚体育手机网站 13

3)、删除数据

mysql> delete from tab1 where id=1;

冠亚体育手机网站 14

telnet 192.168.95.11 11211

冠亚体育手机网站 15

 

3、功用介绍

  从select * from
mysql.func;的结果中大家能够看优秀多有关memcached的函数。谙习memcached指令的校友一眼看千古就能够领略那个函数的大致功效。memc_set、memc_get那不正是极度set与get命令嘛。

实际成效可仿照效法文书档案:

简易测量试验一下这几个函数:

#测试前当然要先将MySQL与memcached建立连接啦!
mysql> select memc_servers_set('192.168.95.11:11211');
mysql> select memc_server_count();
mysql> select memc_set('m','llppppp');
mysql> select memc_get('m');

冠亚体育手机网站 16

telnet 192.168.95.11 11211

冠亚体育手机网站 17

 

5、计算提出

1、假设出现mysql服务重启,须求再度连接memcached服务器select
memc_servers_set(‘192.168.95.11:11211)

2、使用命令查看能够安装的参数,依照现实品种设置最合适参数select
memc_list_behaviors()/G

3、设置MEMCACHED_BEHAVIOR_NO_BLOCK为开垦状态,表示在memcached出现难点时方可延续将数据插入到MySQL中。不然将会等到timeout推行插入操作。

4、在MySQL中应用那个职能时,不要一味地将全部表的数额都布置成这种样式,防止MySQL中采纳过多的函数、以及触发器而影响属性。

 

(以上是温馨的一些视角与计算,若有不足或然失实的地点请各位提议)

作者:那一叶随风

扬言:以上只表示本人在干活学习中某一时间内总括的意见或结论。转发时请在小说页面显著地方给出最早的文章链接

 

4、实例测量试验

1、新建一个数据库test233以及表tab1

冠亚体育手机网站 18

冠亚体育手机网站 19

2、创设多少个触发器

插入数据:
mysql>delimiter $
mysql>create trigger tab1_insert_memc
    -> before insert on tab1
    -> for each row begin
    -> set @m=memc_set(NEW.id,NEW.name);   
    -> end$
更新数据:
mysql> create trigger tab1_update_memc
    ->before update on tab1
    -> for each row begin
    -> set @m=memc_replace(OLD.id,NEW.name);   
    -> end$
删除数据:
mysql> create trigger tab1_delete_memc
    -> before delete on tab1 
    -> for each row begin
    -> set @m=memc_delete(OLD.id);
    -> end$
mysql>delimiter ;

冠亚体育手机网站 20

冠亚体育手机网站 21

3、连接memcached服务器举办数据测验

mysql> select memc_servers_set('192.168.95.11:11211');

1)、向tab1插入几条数据,并查阅结果

mysql> insert into tab1 value('1','1111aaaaff');
.......

冠亚体育手机网站 22

冠亚体育手机网站 23

telnet 192.168.95.11 11211

冠亚体育手机网站 24

2)、改变数据

mysql> update tab1 set name='ooooooooooooooo' where id=1;

冠亚体育手机网站 25

telnet 192.168.95.11 11211

冠亚体育手机网站 26

3)、删除数据

mysql> delete from tab1 where id=1;

冠亚体育手机网站 27

telnet 192.168.95.11 11211

冠亚体育手机网站 28

 

5、计算提议

1、如若出现mysql服务重启,需求重新连接memcached服务器select
memc_servers_set(‘192.168.95.11:11211)

2、使用命令查看能够安装的参数,依照具体项目安装最合适参数select
memc_list_behaviors()/G

3、设置MEMCACHED_BEHAVIOR_NO_BLOCK为开采状态,表示在memcached出现难题时得以继续将数据插入到MySQL中。不然将会等到timeout实践插入操作。

4、在MySQL中利用这些职能时,不要一味地将全体表的数额都摆放成这种样式,幸免MySQL中运用过多的函数、以及触发器而影响属性。

 

(以上是自个儿的有个别见识与计算,若有欠缺只怕失实的地点请各位提议)

作者:那一叶随风

扬言:以上只象征本人在干活学习中某有时间内计算的视角或结论。转发时请在篇章页面明显地方给出最早的小说链接

 

1、介绍
在生养情况中,我们日常利用MySQL作为利用的数据库。但是随着顾客的充实数据量的叠加,大家…

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注