您好,欢迎访问一九零五行业门户网

利用gearman实现redis缓存mysql

环境:centos6.5mysql5.6gearman简介:gearman是一个支持分布式的任务分发框架。设计简洁,获得了非常广泛的..
环境:
centos6.5
mysql5.6
)在mysql中的数据发生改变时触动触发器将数据传入gearman中,这时的mysql相当于gearman的clinet。然后运行自己编写的php程序作为worker,将gearman中的数据传到redis中去,这时的redis相当于是gearman的consumer。
1、安装gearman
    实验中的系统yum源在centos6.5自带的网络yum源的基础上,增加了epel的源,epel (extra packages for enterprise linux,企业版linux的额外软件包) 是fedora小组维护的一个软件仓库项目,为rhel/centos提供他们默认不提供的软件包。使用这个源可以免去很多麻烦,省去源码编译的麻烦,需要注意的是,不论是使用centos自带的网络yum源还是epel扩展源,,都需要你的ip能够访问到公网。
    安装gearman、php、php的gearman扩展、nc工具
yum install -y php-pecl-gearman libgearman  libgearman-devel gearmand nc    启动gearman服务
/etc/init.d/gearmand start    验证gearman是否成功启动,如果返回的结果中有4730端口,那么表示服务已经正常启动了
[root@hadoop1 ~]# netstat -alnutp |grep gearman2、模拟gearman的工作原理:
    使用下列命令查看gearman的队列
watch -n 1 (echo status; sleep 0.1) | nc 127.0.0.1 4730    结果如下
writelog        0       0       0    四列含义:1-任务名称;2-等待队列任务数;3-运行中的任务数;4-正在运行的worker进程数;
编译一段php代码模拟gearman的client:client.php
addserver();    $client->dobackground('writelog', 'log content');    echo '文件已经在后台操作';    echo \n;    执行client.php
php client.php    这时,再次查看gearman的队列,发现等待队列中有一个任务
writelog        1       0       0
编写一段php代码模拟gearman的worker:worker.php
该worker的作用是将客户端传递给gearman的字符串'log content'写入到当前目录下的gearman.log文件中
addserver();    $worker->addfunction('writelog', 'writelog');    while($worker->work());    function writelog($job)    {        $log = $job->workload();        file_put_contents(__dir__ . '/gearman.log', $log . \n, file_append | lock_ex);    }    以nohup的方式后台启动worker.php
nohup php worker.php &    再次查看gearman的队列,发现等待的任务变成0,worker进程变成了1,gearman.log有了内容
writelog        0       0       1[root@hadoop1 ~]# cat gearman.log log content3、安装mysql-server、mysql、php-mysql(php连接mysql的驱动,非必须,这里是为了稍后用程序比较从redis和mysql中分别读取数据的效率)。实验中,由于我的机子上之前已将安装了mysql5.6,所以就直接使用mysql5.6做实验了。当然也可以使用yum开安装mysql,可能安装的mysql版本不是5.6,但是完全没有关系。
    安装mysql相关软件
yum install -y mysql-server mysql php-mysql    启动mysql
/etc/init.d/mysql start4、安装lib_mysqludf_json
wget  https://github.com/mysqludf/lib_mysqludf_json/archive/master.zipmv master master.zipunzip master.zipcd lib_mysqludf_json-masterrm -rf lib_mysqludf_json.so gcc $(mysql_config --cflags) -shared -fpic -o lib_mysqludf_json.so lib_mysqludf_json.c这时重新编译生成了lib_mysqludf_json.so,然后需要把lib_mysqludf_json.so拷贝到mysql的插件目录下,查看mysql的插件目录:
[root@hadoop1 ~]# mysql -u root -pupbjsxt --execute=show variables like '%plugin%';    +---------------+--------------------------+| variable_name | value                    |+---------------+--------------------------+| plugin_dir    | /usr/lib64/mysql/plugin/ |+---------------+--------------------------+[root@hadoop1 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
其它类似信息

推荐信息