redis linux添加缓存数据,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

8717f3f37c27fc782a70f7f37ecbec18.png

9c62bd852a97e05e848458960a5e659f.png

36e044013bc78e178bf36510666f832b.png

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模块

6dcaa5451f7357eb6588c07c73aa976c.png

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

1156a6ed8c51597c84ac3023ccb50af7.png

7504bd581a0478528608d9bb0628ea4e.png

feb8a154d3d5b644a036337982a902a4.png

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

0644807e04b6fc76f71de9118de81efa.png

(二)server2中操作(redis)

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

vim /etc/redis/6379.conf#删除主从复制行

systemctl start redis_6379

redis-cli info#查看server2是否是master

a757250fbb7afdadf6a38fea63d11e10.png

(三)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

aef47a6045d98d992eca37409b564176.png

254fee095963f24cf0b9fc4e67ef6c7f.png

f97bef5a7ca68bc6304dfa08c5e89a07.png

(四)测试

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

852dd846632c8b44855019919ba53c68.png

8b989f44ad0b7db7d44d8a85a0994ec5.png

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

update test set name='westos' where id=1; #更新数据库

redis-cli get 1 #server2中查看redis的缓存

e832f3a09768f3d6048222f1c37be844.png

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

491d44202b5a68dbc3e29716187e1a0c.png

a357a5c5b78094b51c332d6c90e724b6.png

6fb386b0e446810e449107a835fb1b5c.png

三、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相关软件

847ee10dff4e1da64cda76b7deaf04ff.png

3f8f2b1a41b143bf9dfe35101c8a9992.png

a43f75e0d579d692d554460c396ba797.png

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

e2fa7e4993b96fd4960cdae4b78f83f3.png

907c0eebf0eecb47d0067ada8a2e08bd.png

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

bf0f6a7ee9d375467b1021f930c3641d.png

(二)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

3ecc0622712a00221452f711c80d4242.png

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

b886b257b2b21d3b5d9845f49b130988.png

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函数

6d0cbbe74517a5fe91d1163c22acfd02.png

b7480ca04741ff69b8f8e7bce4736a1b.png

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

481b9f4854aba6c9a2ddaf1119ac7b8c.png

5da62cb9f7732d5bd444fd8569c5ea81.png

3d1ae987c5351e1c2b5c687b3a43300f.png

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; #查看触发器信息

a9726074f5467a6ef40f45c7db116bc1.png

cd336f3f410729cb2bac3e991c99ea1a.png

(三)测试

1. 在server1中运行worker.php

nohup php /usr/local/worker.php &

79ee24baa0f69245fa8b08a65901f485.png

2. server3中更新数据库数据

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

6b50e310ae8c031b31b052ebbd9d9ce3.png

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

0452d22610f4d4118e9aae8f859fd81c.png

4. server2中读取数据

e705740d267670bfc15824ca7637f066.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值