linux--redis(redis在lnmp中做加速器2)

在1的基础上测试更新mysql数据,work端和redis并不能一同更新

在server3上面更改数据

在这里插入图片描述
redis上面 客户端并没有改变

在这里插入图片描述在这里插入图片描述

为了解决这种问题,安装调度器gearmand

gearmand是一个管理调度的工具,客户请求到达gearmand,它把请求分配给合适的work进程

client --> job --> worker

1、Client 请求发起者,客户端程序可以是任何一种语言,C 、PHP 、Perl 、Python 等。
2、Job 请求调度者,负载协调把 Client 发出的请求转发给合适的 Worker。
3、Worker 请求处理者,处理 Job 分发来的请求,可以是任何一种语言

server1

刚才已经装好gearmand的包

在这里插入图片描述

server3

添加一个注册函数 传送数据

yum install unzip -y
unzip lib_mysqludf_json-master.zip
yum install mariadb-devel -y
yum install gcc -y

编译模块
将模块放到 mysql 插件目录

cd lib_mysqludf_json-master
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
cd
cp lib_mysqludf_json-master/lib_mysqludf_json.so /usr/lib64/mysql/plugin/

查看

mysql -uroot -pwestos
show global variables like 'plugin_dir';

在这里插入图片描述
注册函数

CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';

在这里插入图片描述

安装插件管理 gearman 的分布式队列

tar zxf gearman-mysql-udf-0.6.tar.gz
安装插件
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    
cd gearman-mysql-udf-0.6
./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql
make && make install

在mysql 里面配置

注册 udf 函数

mysql -uroot -pwestos
CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
select * from mysql.func;
指定 gman 服务信息
SELECT gman_servers_set('172.25.254.1:4730');

在这里插入图片描述
编写 mysql 触发器

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 ;

在这里插入图片描述
导入

mysql -pwestos < test.sql

server1

cp worker.php /usr/local/
cd /usr/local/
vim worker.php 
nohup php /usr/local/worker.php &> /dev/null & 
后台运行 不管对错
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');

$redis = new Redis();
$redis->connect('172.25.254.2', 6379);

while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $work->name);
}
?>

测试:

在server3上面改变

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值