Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)

一、redis缓存服务器

 

二、redis作mysql的缓存服务器

实验准备:

server1——php
server2——redis(r)
server3——mariadb(w)

软件安装:

redis的安装参考redis相关文章,mariadb数据库,不用做安全初始化,需要用其中的test测试库进行实验

#server1
yum install -y httpd php php-mysql 
yum install php-devel-5.4.16-42.el7.x86_64.rpm 
#server2
redis-5.0.3.tar.gz
#server3
yum install -y mariadb-server

(一)server1中操作(php)

1. 在默认发布目录下编写php测试页

mv test.php /var/www/html
vim test.php 
$redis->connect('172.25.5.2',6379) or die ("could net connect redis server");
$connect = mysql_connect('172.25.5.3','redis','westos');
systemctl start httpd

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第1张图片

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第2张图片

2. 安装php的redis扩展

php -m | grep mysql
php -m | grep redis
unzip phpredis-master.zip
cd phpredis-master
phpize
./configure --enable-redis
make && make install
#在/usr/lib64/php/modules/该目录下,可以查看是否有redis.so模块是否添加
cd /etc/php.d/
vim /etc/php.ini 
date.timezone = Asia/Shanghai    #设置时区(php的要求)
cp mysql.ini redis.ini
vim redis.ini
extension=redis.so    #添加redis模块
systemctl restart httpd

安装php软件后,可以过滤出相应的数据库模块,此外我们还需要扩展redis模块

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第3张图片

解压源码包,并进行安装,用来提供redis模块

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第4张图片

编辑ini文件,用来加载redis模板

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第5张图片

(二)server2中操作(redis)

由于server2中之前做过redis实验,这里就不再次搭建了

vim /etc/redis/6379.conf	#删除主从复制行
systemctl start redis_6379
redis-cli info	#查看server2是否是master

(三)server3中操作(mysql)

导入数据到测试库中,注意安装好mariadb-server后,不用做安全初始化,直接通过【mysql】命令,进入数据库,并对redis用户授权。

systemctl start mariadb
mysql < test.sql
mysql
use test;
show tables;
select * from test;
grant all on test.* to redis@'%' identified by 'westos';
systemctl restart mariadb

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第6张图片

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第7张图片

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第8张图片

(四)测试

浏览器中访问http://172.25.5.1/test.php,虽然我们可以通过redis读取server3中mysql的数据,但是mysql更新数据,redis是很难自动更新的,只有删除更新的值,它才会主动的从数据库中取数据

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第9张图片

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第10张图片

在server3的数据库中更新数据,观察网页及server2中该数据是否更新

update test set name='westos' where id=1;    #更新数据库
redis-cli get 1    #server2中查看redis的缓存

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第11张图片

server3中的mysql数据更新后,查看redis端,数据并没有更新,删除数据后,需要访问server1中的php页面,使redis主动从redis上取数据进行更新。

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第12张图片

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第13张图片

三、gearman实现数据同步

Gearman 是一个支持分布式的任务分发框架

Gearman Job Server:Gearman 核心程序,需要编译安装并以守护进程形式运行在后台。
Gearman Client:可以理解为任务的请求者。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker 接收到 Gearman Client 传递的任务内容后,会按顺序处理。

 大致流程:下面要编写的 mysql 触发器,就相当于 Gearman 的客户端。修改表,插入表就相当于直接下发任务。然后通过 lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式,然后在通过 gearman-mysql-udf 插件将任务加入到 Gearman 的任务队列中,最后通过redis_worker.php,也就是 Gearman 的 worker 端来完成 redis 数据库的更新。

(一)server1中

1. 在server1中安装gearman软件包

yum install gearmand-1.1.12-18.el7.x86_64.rpm libgearman-* libevent-devel-2.0.21-4.el7.x86_64.rpm 
systemctl start gearmand
netstat -antlp
vim worker.php 
$redis->connect('172.25.5.2', 6379);
mv worker.php /usr/local

安装gearman相关软件

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第14张图片

 

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第15张图片

2. 安装php的gearman扩展

tar zxf gearman-1.1.2.tgz 
cd gearman-1.1.2
phpize
./configure --with-gearman
make && make install
在/usr/lib64/php/modules/目录下查看是否有gearman.so模块出现
cd /etc/php.d
cp redis.ini gearman.ini
vim gearman.ini 
extension=gearman.so
systemctl restart httpd
php -m | grep gearman

编译安装gearman

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第16张图片

复制ini配置文件,用来加载gearman模块

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第17张图片

(二)server3中

1. 编写test.sql文件

vim test.sql
use test;
#CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');

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 ;
yum install -y unzip gcc mysql-devel

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第18张图片

2. 安装lib_mysqludf_json

lib_mysqludf_json UDF 库函数将关系数据映射为 JSON 格式。通常,数据库中的数据映射为 JSON 格式,是通过程序来转换的。

unzip lib_mysqludf_json-master.zip
cd lib_mysqludf_json-master/
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c 

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第19张图片

mysql
show global variables like 'plugin_dir';    #查看mysql的模块目录
cd /usr/lib64/mysql/plugin/
cp ~/lib_mysqludf_json-master/lib_mysqludf_json.so .    #拷贝lib_mysqludf_json.so模块
mysql
CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';    #注册UDF函数
select * from mysql.func;    #查看UDF函数

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第20张图片

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第21张图片

3. 安装gearman-mysql-udf

这个插件是用来管理调用 Gearman 的分布式的队列

tar zxf gearman-mysql-udf-0.6.tar.gz 
yum install -y libgearman-devel-1.1.12-18.el7.x86_64.rpm libgearman-* libevent-devel-2.0.21-4.el7.x86_64.rpm
cd gearman-mysql-udf-0.6
./configure --with-mysql --libdir=/usr/lib64/mysql/plugin/
make && make install

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第22张图片

mysql
CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';     #注册UDF函数
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
select * from mysql.func;    #查看函数
SELECT gman_servers_set('172.25.5.1:4730');    #指定gearman的服务信息
mysql < test.sql    #导入json相关信息
SHOW TRIGGERS FROM test;    #查看触发器信息

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第23张图片

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第24张图片

(三)测试

1. 在server1中运行worker.php

nohup php /usr/local/worker.php &

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第25张图片

2. server3中更新数据库数据

update test set name='redhat' where id=5;

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第26张图片

3. 浏览器中访问,观察是否自动更新

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第27张图片

4. server2中读取数据

Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步)_第28张图片

你可能感兴趣的:(Linux之Redis部署(redis作mysql的缓存服务器、gearman实现数据同步))