一、测试环境在Ubuntu kylin 14.0464bit

已经安装Mysql、Redis、php、lib_mysqludf_json.so、Gearman。

点击这里查看测试数据库及表参考

本文也有些基本操作,在之前文章里有介绍。1、安装

安装gearman-mysql-udf

apt-get install libgearman-dev

wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-mysql-udf-0.6.tar.gz

tar -xzf gearman-mysql-udf-0.6.tar.gz

cd gearman-mysql-udf-0.6./configure --with-mysql=/usr/bin/mysql_config --libdir=/usr/lib/mysql/plugin/make

sudo make install

注册UDF函数:

CREATE FUNCTION gman_do_background RETURNS STRING SONAME'libgearman_mysql_udf.so';

CREATE FUNCTION gman_servers_set RETURNS STRING SONAME'libgearman_mysql_udf.so';

CREATE FUNCTION gman_do RETURNS STRING SONAME"libgearman_mysql_udf.so";

CREATE FUNCTION gman_do_high RETURNS STRING SONAME"libgearman_mysql_udf.so";

CREATE FUNCTION gman_do_low RETURNS STRING SONAME"libgearman_mysql_udf.so";

CREATE FUNCTION gman_do_background RETURNS STRING SONAME"libgearman_mysql_udf.so";

CREATE FUNCTION gman_do_high_background RETURNS STRING SONAME"libgearman_mysql_udf.so";

CREATE FUNCTION gman_do_low_background RETURNS STRING SONAME"libgearman_mysql_udf.so";

CREATE AGGREGATE FUNCTION gman_sum RETURNS INTEGER SONAME"libgearman_mysql_udf.so";

CREATE FUNCTION gman_servers_set RETURNS STRING SONAME"libgearman_mysql_udf.so";

指定Gearman服务器的信息:

SELECT gman_servers_set('127.0.0.1:4730');

使用示例:

参照http://blog.csdn.net/xundh/article/details/46287681 建立一个reverse.php的worker

$worker= newGearmanWorker();

$worker->addServer();

$worker->addFunction("reverse", "my_reverse_function");while ($worker->work());

function my_reverse_function($job){return strrev($job->workload());

}?>输入命令php reverse.php运行。

到mysql里,输入:

SELECT gman_do("reverse",'abcdef') AS test FROM Users; ---FROM Users也可以不带。

这里写图片描述

SELECT gman_do("reverse", password) AS test FROM Users;

可以看到输出结果,其中password列已经被reverse的worker处理,mysql这时充当client端:

这里写图片描述

还可以输入以下命令测试:

SELECT gman_do_high("reverse", password) AS test FROM Users; --高优先权

这里写图片描述

SELECT gman_do_background("reverse", password) AS test FROM Users; --后台低优先权,返回主机和作业号。

这里写图片描述

创建syncToRedis作业

停止前面的reverse worker,建立一个syncToRedis.php<?php

ini_set('default_socket_timeout', -1); //很重要,否则可能报RedisException with message read error on connection ...

$worker = newGearmanWorker();

$worker->addServer();

$worker->addFunction('syncToRedis', 'syncToRedis');

$redis= newRedis();

$redis->connect('127.0.0.1', 6379);

echo("begin:\n");while($worker->work());

function syncToRedis($job)

{global$redis;

$workString= $job->workload();

$work=json_decode($workString);

echo('get value:');

echo($workString);

echo("\n");

echo('json_decode:');

var_dump($work);

echo("\n");if(!isset($work->user_id)){return false;

}

$redis->set($work->user_id, $workString);

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27在mysql里测试一下:

SELECT gman_do("syncToRedis", json_object(user_id as user_id,password aspassword)) AS test FROM Users;

这里写图片描述

如果redis监控是打开的,可以看到redis已经收到了数据:

这里写图片描述

redis查询结果

这里写图片描述2、建立触发器

DELIMITER $$

CREATE TRIGGER datatoredis AFTER UPDATE ON Users

FOR EACH ROW BEGIN

SET @ret=gman_do_background('syncToRedis', json_object(NEW.user_id as `user_id`, NEW.email as `email`,NEW.display_name as `display_name`,NEW.password as`password`));

END$$

DELIMITER ;

执行SQL语句测试:

insert into Users values('8','new','3','hello');

update Usersset email='new8@qq.com' where user_id=8;

这里写图片描述

正常使用时,可以把worker使用&设置为后台任务:

nohup php syncToReids.php&其它问题

有的时候,命令行执行php语句时可能会提示下面的错误,

[root@iZ230296jm2Z redis]# php syncToRedis.php PHP Fatal error: Class ‘Redis’ not foundin /home/wwwroot/default/youai/php/redis/syncToRedis.php on line 6处理方法:

运行php命令和apache或ngnix可能使用了不同的php.ini,即使在php.ini里看到加载了redis,还需要在php命令行使用php.ini里也增加Redis模块。

查看ngnix使用的php.ini位置使用

mysql gman do_Redis 学习笔记四 Mysql 与Redis的同步实践相关推荐

  1. 如何安装mysql 匹配_学习笔记----安装MySQL

    安装MySQL 1.下载解压源代码包. 我的是mysql 5.1.48版本的. 2.添加mysql用户和组 [root@tigertall mysql-5.1.48]#groupadd  mysql ...

  2. 马哥mysql,马哥学习笔记五MYSQL初步

    1.mysql -u USERNAME -p -h MYSQL_SERVER linux:socket windows:memory 2.交互式模式中的命令类别 客户端命令 服务器端命令 必须使用语句 ...

  3. MySQL组复制学习笔记(基于MySQL 8+) -- 使用篇

    3.1. 启动/停止 可以通过start/stop group_replication来启动停止组复制进程. mysql> start group_replication; /* 启动MySQL ...

  4. 【Spring学习笔记 四】Spring自动装配机制实践

    我们一般学习某个知识,一定会现有个较为复杂的配置让你理解其中的关系,这个配置清晰规整,但是可能会需要大量的配置,这个时候就会有约定大于配置的理论实现了,通过我们约定好的一致的名称,我可以少写很多对应关 ...

  5. mysql新增表字段回滚_MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  6. MySQL高级学习笔记(四)

    文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...

  7. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  8. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  9. mysql的sqlyog学习笔记(查询部分)(代码用命令行显示 )

    索引 语言 查询 基础查询 select 查询列表 from 表名; 查询函数(调用函数,获取返回值) 起别名 +的作用 distinct的使用(去重) 查看表的结构 条件查询 按关系表达式筛选 按逻 ...

最新文章

  1. Scala学习教程笔记二之函数式编程、Object对象、伴生对象、继承、Trait、
  2. 未排序数组中累加和为给定值的最长子数组系列问题
  3. java web总结:tomcat使用教程
  4. Hadoop集群完全分布式模式环境部署
  5. 《WinForm开发系列之控件篇》Item1 BackgroungWorker
  6. 为什么要用Redis
  7. vmware安装问题:Microsoft Runtime DLL安装程序未能完成安装
  8. 吴恩达机器学习4——神经网络
  9. 语言的口味(taste)
  10. 嵌入式Linux环境变量如何参与程序运行
  11. 工程图学与计算机绘图考查,工程图学与计算机绘图
  12. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
  13. php tp gii,TP电商项目:使用GII制作品牌管理
  14. CF1367D 构造
  15. ps如何给字体图换颜色
  16. 图像数据增强及其对应的标签扩充
  17. 如何免费下载的全球的矢量边界(WGS84)
  18. board在java是什么意思_Java 大白话讲解设计模式之
  19. 三层内网 外网打点到内网域 sec123 复现
  20. java:获取当月最后一天

热门文章

  1. 尼尔森F形状网页浏览模式
  2. 编程php计算行李托运费_飞机行李箱怎么算托运费?
  3. NIST加密标准是什么意思?
  4. 润迈德医疗开启招股:未有基石投资者参与,亏损金额翻倍增长
  5. 阴阳师服务器紧急维护,2月24日阴阳师服务器更新维护内容公告
  6. 大咖丨昆仑数据陈晨:工业大数据真正要做的是智能分析和智能决策
  7. python爬取qq空间说说
  8. STC8单片机1T模式跑RTX51
  9. matlab自适应amc,自适应调制解调(ACM),Adaptive modulation and coding (AMC),音标,读音,翻译,英文例句,英语词典...
  10. POJ 1066 Treasure Hunt 解题报告