server1:192.168.1.11 安装nginx和php为用户提供服务访问入口
server3:192.168.1.13 安装mysql,存储数据
server2:192.168.1.12 安装redis作为缓存服务器,缓存mysql数据
一、搭建LNMP+Redis
1. server1安装nginx和php以及php相关插件
安装nginx
解压
tar zxf nginx-1.18.0.tar.gz
![v2-a5a6f21db48a6a53a701b5eed2e09689_b.jpeg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-a5a6f21db48a6a53a701b5eed2e09689_b.jpeg)
vim auto/cc/gcc ###这一步是为了取消debug模式,比较省空间,可以不做
![v2-05ac487d444fae69c4884c35b3d17e62_b.jpeg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-05ac487d444fae69c4884c35b3d17e62_b.jpeg)
安装依赖
yum install -y pcre-devel zlib-devel
编译
./configure --prefix=/usr/local/nginx
![v2-89a4fa375ff5bf7f77f9feafe6fd1add_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-89a4fa375ff5bf7f77f9feafe6fd1add_b.jpg)
安装
make && make install
![v2-03fa2f604f21d938d5966fb925db2e72_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-03fa2f604f21d938d5966fb925db2e72_b.jpg)
![v2-2b9de2fd18b80fa97e2d0d14489b70a1_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-2b9de2fd18b80fa97e2d0d14489b70a1_b.jpg)
安装php及相关插件 gearman(后面会用到,为了实现redis更新mysql内容)
![v2-e30d613392abd176d9f2bfc612f1812d_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-e30d613392abd176d9f2bfc612f1812d_b.jpg)
配置nginx为系统服务
vim /usr/lib/systemd/system/nginx.service
![v2-49f587c86c80fe7473c469ec1553e44d_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-49f587c86c80fe7473c469ec1553e44d_b.jpg)
软连接,将nginx配置文件连接到/etc下
ln -s /usr/local/nginx/conf/nginx.conf /etc/
修改nginx配置文件如下
vim /etc/nginx.conf
![v2-dbdc6c646d4b26ad42a9b7debb6dbecd_b.jpeg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-dbdc6c646d4b26ad42a9b7debb6dbecd_b.jpeg)
![v2-3594ce059a347eaaabe4c47ee97d46d5_b.jpeg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-3594ce059a347eaaabe4c47ee97d46d5_b.jpeg)
![v2-24cdc282e428b2cf1d7bb55ace32875d_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-24cdc282e428b2cf1d7bb55ace32875d_b.jpg)
开启nginx测试
systemctl start nginx.service
浏览器测试访问
![v2-7087c6c60fcf11a3017e4509e4143312_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-7087c6c60fcf11a3017e4509e4143312_b.jpg)
开启php,编写php页面测试
systemctl start php-fpm.service
![v2-3d9c539beaa2b060f1fde1f9190e3034_b.jpeg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-3d9c539beaa2b060f1fde1f9190e3034_b.jpeg)
![v2-ba343688f47cdbb84b4f156160a51562_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-ba343688f47cdbb84b4f156160a51562_b.jpg)
浏览器测试访问
![v2-5085dcb62d2b9bf23f7294eeebedecd7_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-5085dcb62d2b9bf23f7294eeebedecd7_b.jpg)
2. server2安装redis
上一篇讲过安装redis步骤,这里就跳过了,详情见
https:// blog.csdn.net/qq_360232 19/article/details/106179458
打开redis
![v2-65e575ab889e580d4c8deceacdb76de4_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-65e575ab889e580d4c8deceacdb76de4_b.jpg)
3. server3安装数据库
这里直接用官方yum源自带的mariadb
yum install -y mariadb-server
![v2-b05a2e341c5088a8f130a177d219588f_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-b05a2e341c5088a8f130a177d219588f_b.jpg)
启动服务
systemctl start mariadb.service
安全初始化
mysql_secure_installation ###初始密码为空,直接回车即可
![v2-be05bd2a20990ae2b1ed6d819c1c1931_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-be05bd2a20990ae2b1ed6d819c1c1931_b.jpg)
登陆数据库
mysql -uroot -p密码
![v2-6598104a2e1bc1e31551af7ba1107a66_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-6598104a2e1bc1e31551af7ba1107a66_b.jpg)
授权
grant all on *.* to redis@'%' identified by 'redhat';
flush privileges;
![v2-934f4ce5f20f285c026f47e96cb17e05_b.jpeg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-934f4ce5f20f285c026f47e96cb17e05_b.jpeg)
二、编写php测试页面,创建测试数据
vim index.php
![v2-a1cc83f5f5c2ca2e23e552f21481fae5_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-a1cc83f5f5c2ca2e23e552f21481fae5_b.jpg)
根据自己实际情况更改redis和mysql绑定的ip端口,创建对应的数据库,比如我这里是testdb,所以下一步,在mysql创建对应数据库,以及内容
use testdb
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES (1,'sven'),(2,'jim'),(3,'zhu'),(4,'wang'),(5,'ftd'),(6,'test'),(7,'test01'),(8,'test02'),(9,'test03');use testdb
CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
INSERT INTO `test` VALUES (1,'sven'),(2,'jim'),(3,'zhu'),(4,'wang'),(5,'ftd'),(6,'test'),(7,'test01'),(8,'test02'),(9,'test03');
测试
浏览器访问
![v2-0c3843c5b941baab2330d1ca7278737a_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-0c3843c5b941baab2330d1ca7278737a_b.jpg)
这是第一次访问,redis中没有key,从mysql中缓存数据到redis
再访问
![v2-356cf5dff72bea68f46b1445d24b3f83_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-356cf5dff72bea68f46b1445d24b3f83_b.jpg)
第二次访问,因为redis'中有key,所以直接从redis中获取数据
到此为止已经实现了redis缓存mysql数据,但如果mysql数据更新了,而redis不会去主动同步mysql数据,会造成redis缓存和mysql数据不同步。
解决方法:通过mysql触发器,当更新时触发同步,使得redis和mysql数据一致。
三、gearman实现mysql和redis同步
1. 介绍
Gearman是一个支持分布式的任务分发框架:
- Gearman Job Server:Gearman核心程序,需要编译安装并以守护进程形式运行在后台。
- Gearman Client:可以理解为任务的请求者。
- Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后,会按顺序处理。
我们在最开始安装php插件时已经安装了gearman
下面要编写的mysql触发器,就相当于Gearman的客户端。
修改表,插入表就相当于直接下发任务。
- 通过lib_mysqludf_json UDF库函数将关系数据映射为JSON格式
- 再通过gearman-mysql-udf插件将任务加入到Gearman的任务队列中
- 最后通过redis_worker.php,也就是Gearman的worker端来完成redis数据库的更新。
2. 安装lib_mysqludf_json
先安装mariadb开发包,否则不支持udf(用户自定义函数)
yum install -y mariadb-devel
![v2-614277f4b905be4e3e022f62f7841e89_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-614277f4b905be4e3e022f62f7841e89_b.jpg)
解压lib_mysqludf_json安装包并编译
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
![v2-75240c57828fd0eca4527fc16b16cbbc_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-75240c57828fd0eca4527fc16b16cbbc_b.jpg)
将编译好的插件复制到mysql插件目录
cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
注册udf函数
CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
![v2-f88936cf46d55d183c416d353adb8d97_b.jpeg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-f88936cf46d55d183c416d353adb8d97_b.jpeg)
3. 安装gearman-mysql-udf
获取安装包和相关依赖
![v2-8337dadc6428a028ba1bc74964678b6f_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-8337dadc6428a028ba1bc74964678b6f_b.jpg)
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
解压gearman-mysql-udf
tar zxf gearman-mysql-udf-0.6.tar.gz
![v2-11f5b6fed4806dd1571f822304d41dac_b.jpeg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-11f5b6fed4806dd1571f822304d41dac_b.jpeg)
编译
./configure --with-mysql=/usr/bin/mysql_config --libdir=/usr/lib64/mysql/plugin/
![v2-e29c8789b78859c72cf2e933516a0304_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-e29c8789b78859c72cf2e933516a0304_b.jpg)
![v2-78153037effeea6bdffdc503098a1594_b.jpeg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-78153037effeea6bdffdc503098a1594_b.jpeg)
安装
make && make install
![v2-326472b9307487bc63e3e7a4e3a7adce_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-326472b9307487bc63e3e7a4e3a7adce_b.jpg)
注册函数
CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
![v2-24b40a853d7201e761508a6698811a13_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-24b40a853d7201e761508a6698811a13_b.jpg)
注册完成可以查看下mysql的函数
select * from mysql.func;
![v2-2dc76859d4fa1584a947e6843e1abb08_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-2dc76859d4fa1584a947e6843e1abb08_b.jpg)
设置gearman的server,我们是在server1安装的gearman,所以这里填写server1的ip(gearman默认端口4730)
select gman_servers_set('192.168.1.11:4730');
![v2-a94ebb9e4ce899203b1f9afdd01a496d_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-a94ebb9e4ce899203b1f9afdd01a496d_b.jpg)
可以打开server1的gearman,验证下端口
![v2-3dac9fc5364af003cd7a07fa0e8e2367_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-3dac9fc5364af003cd7a07fa0e8e2367_b.jpg)
编写mysql触发器
use testdb
DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
END$$
DELIMITER ;
![v2-d9c51e129ec03a38b006f14ebcd26429_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-d9c51e129ec03a38b006f14ebcd26429_b.jpg)
查看定义的触发器
show triggers from testdb;
![v2-00b163ce6a66072a635a49e7d21298db_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-00b163ce6a66072a635a49e7d21298db_b.jpg)
在server1编写gearman的worker
vim syncRedis_worker.php
![v2-fab332269918857dff563228ca4112fa_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-fab332269918857dff563228ca4112fa_b.jpg)
运行这个php
nohup php syncRedis_worker.php &> /dev/null &
![v2-08286a651b34f7c130e9ab491e4f45d8_b.jpeg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-08286a651b34f7c130e9ab491e4f45d8_b.jpeg)
测试:
原来访问的数据
![v2-92fbd3b955d74eafd85ef0c39bc918cd_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-92fbd3b955d74eafd85ef0c39bc918cd_b.jpg)
mysqll端更新数据
![v2-a9f123e607ea25a61748c05603832b79_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-a9f123e607ea25a61748c05603832b79_b.jpg)
浏览器访问
![v2-4b1a489d5570ece47efb770571959ca5_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-4b1a489d5570ece47efb770571959ca5_b.jpg)
可以看到,数据已经更新
访问redis,查看数据,已经更新为新数据
![v2-fe39d9b7df88656c25e2cb1ddd279df8_b.jpeg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=f17a4c2f-6f2f-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-fe39d9b7df88656c25e2cb1ddd279df8_b.jpeg)
至此,本文关于部署Redis作为MySQL缓存的介绍结束了,如果你看完觉得有用,还望不吝转发
原文链接: https:// blog.csdn.net/qq_360232 19/article/details/10622952