一、Redis实时同步mysql数据
Gearman是一套用来把程式需求委派给机器,提供通用的程序框架来将任务分发在机器运算。它同时具备并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。
主要服务:gearmand
如下图所示:

redis 条件更新数据类型 redis实时更新数据_redis


实验操作过程:

实验环境使用上一篇:搭建【(nginx+php)+mysql+redis】的服务平台的环境首先server1启动gearman

redis 条件更新数据类型 redis实时更新数据_mysql_02


获取安装UDF

UDF:

UDF (User-Defined Function)(用户定义函数)

此概念出现在MySQL、Interbase、Firebird、Fluent中,根据用户实际应用的需要而自行开发的函数。

基本用户定义函数是一类代码,对MYSQL服务器功能进行扩充,通过添加新函数,性质就象使用本地MYSQL函数abs()或concat().UDF是用C(或C++)写的。也许还可以用BASIC,C#或其它什么语言.

在server3上

客户端上传软件包
[root@client rpms]# scp lib_mysqludf_json-master.zip server3:
root@server3's password: 
lib_mysqludf_json-master.zip                                                                                                                               
100%   23KB   4.9MB/s   00:00    
[root@server3 ~]# yum install -y unzip
[root@server3 ~]# unzip lib_mysqludf_json-master.zip   解压
Archive:  lib_mysqludf_json-master.zip
37f851c808c4161beb4d5e535771dc0c59c82de6
   creating: lib_mysqludf_json-master/
  inflating: lib_mysqludf_json-master/README.md  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.c  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.html  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.so  
  inflating: lib_mysqludf_json-master/lib_mysqludf_json.sql  
[root@server3 ~]# ls
anaconda-ks.cfg  lib_mysqludf_json-master  
lib_mysqludf_json-master.zip  redis-5.0.3  test.sql
[root@server3 ~]# cd lib_mysqludf_json-master/
[root@server3 lib_mysqludf_json-master]# ls
lib_mysqludf_json.c  lib_mysqludf_json.html 
 lib_mysqludf_json.so  lib_mysqludf_json.sql  README.md
[root@server3 lib_mysqludf_json-master]# yum install -y mariadb-devel 安装数据库开发包
[root@server3 lib_mysqludf_json-master]# yum install -y gcc
[root@server3 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
[root@server3 lib_mysqludf_json-master]# ls
lib_mysqludf_json.c  lib_mysqludf_json.html  lib_mysqludf_json.so  lib_mysqludf_json.sql  README.md
[root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.s
lib_mysqludf_json.so   lib_mysqludf_json.sql  
 复制插件到mysql的插件目录中
[root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.so   /usr/lib64/mysql/plugin/

redis 条件更新数据类型 redis实时更新数据_json_03


注册udf函数

redis 条件更新数据类型 redis实时更新数据_gearman_04


安装gearman客户端

redis 条件更新数据类型 redis实时更新数据_redis 条件更新数据类型_05

[root@server3 ~]# yum install -y 
libevent-devel-2.0.21-4.el7.x86_64.rpm 
libgearman-1.1.12-18.el7.x86_64.rpm 
libgearman-devel-1.1.12-18.el7.x86_64.rpm
[root@server3 ~]# cd gearman-mysql-udf-0.6/
[root@server3 gearman-mysql-udf-0.6]# ls
aclocal.m4  AUTHORS  ChangeLog  config  config.h.in  configure  configure.ac  COPYING  libgearman_mysql_udf  m4  Makefile.am  Makefile.in  NEWS  README
[root@server3 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin --with-mysql  编译

redis 条件更新数据类型 redis实时更新数据_gearman_06


再次注册udf函数

redis 条件更新数据类型 redis实时更新数据_mysql_07


创建触发器

redis 条件更新数据类型 redis实时更新数据_gearman_08


redis 条件更新数据类型 redis实时更新数据_gearman_09


编写一个work.php

[root@client rpms]# scp worker.php server1:
root@server1's password: 
worker.php

redis 条件更新数据类型 redis实时更新数据_json_10


redis 条件更新数据类型 redis实时更新数据_gearman_11


测试一下数据是否实时同步

redis 条件更新数据类型 redis实时更新数据_mysql_12


redis 条件更新数据类型 redis实时更新数据_json_13


再来一次

redis 条件更新数据类型 redis实时更新数据_gearman_14


redis 条件更新数据类型 redis实时更新数据_mysql_15


总结:mysql数据库数据发生改变——>会触发触发器(trigger)——>json_map格式化json格式易读取——>mysql-plugin插件——>gearman(server)——>server1上的worker(php-gearman、php-redis)——>同步到Redis上——>client 客户端—下次访问—>Redis——>client