利用gearman同步mysql数据到redis
一.Gearman
1.Gearman是一个分发任务的程序框架.
2.体系:
a.client:发送一个job
b.server:找到合适的worker,把job交给该worker
c.worker:处理job
二.安装Gearmand服务
1.Gearman
a.官网
http://gearman.org/
b.官网下载:
https://launchpad.net/gearmand
2.安装依赖库
- # yum install -y boost boost-devel gperf libevent-devel libuuid-devel
ps:要求boost版本至少大于1.39,系统之前安装的是1.3;所以需要升级
3.升级boost到1.55.0
a.下载boost_1_55_0.tar.bz2
http://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.55.0%2F&ts=1385953406&use_mirror=softlayer-ams
b.解压
c. 安装
- ./bootstrap.sh
- ./b2
- ./b2 install
4.安装Gearman
a.解压
b.编译
- ./configure --prefix=/usr/local/gearmand --with-boost=/usr/local/boost/ --with-boost-libdir=/usr/local/boost/lib
c.make
出现错误:error: cinttypes: No such file or directory
安装:gcc44等
- yum install gcc44 gcc44-c++ libstdc++44-devel -y
在/etc/profile中加入
export CC=/usr/bin/gcc44 or export CC=/usr/bin/gcc
export CXX=/usr/bin/g++44
- #source /etc/profile
d.再次make
报错:
- error: 'SQLITE_OPEN_READWRITE' was not declared in this scope
e.安装新的sqlite
- #wget http://www.sqlite.org/2014/sqlite-autoconf-3080704.tar.gz
- #tar zxvf sqlite-autoconf-3080704.tar.gz
- #cd sqlite-autoconf-3080704
- #./configure --prefix=/usr/local/sqlite
- #make && make install
f.再次配置编译安装
- #./configure --prefix=/usr/local/gearmand --with-boost=/usr/local/boost/ --with-boost-libdir=/usr/local/boost/lib --with-sqlite3=/usr/local/sqlite
- #make
出现错误undefined reference to `sqlite3_prepare_v2'
- #ln -s /usr/local/sqlite/lib/libsqlite3.so.0.8.6 /usr/lib64
*如果/usr/lib64下存在libsqlite3.so.0.8.6,将其重命名
三.启动Gearman
- 1.
- /usr/local/gearmand/sbin/gearmand -d -u root -L 127.0.0.1 --log-file=/var/log/gearmand.log
报错:
error while loading shared libraries: libboost_program_options.so.1.55.0: cannot open shared object file: No such file or directory
- #vi /etc/ld.so.conf.d/gearman.conf
插入以下内容
/usr/local/boost/lib/
/usr/local/gearman/lib/
执行
- #ldconfig
2.参数详解
-b,--backlog= 储备的监听连接数量
-d, --daemon 后台运行
-f, --file-descriptors= 文件描述符的数量
-h, --help 帮助
-j, --job-retries= 在ob server移除不可用job之前运行的次数,防止不断运行导致其他可用worker崩溃。默认没有限制
-l, -log-file= 日志文件存放位置(默认记录最简单日志)
-L, --listen= 监听的IP,默认全部接受
-p, --port= 指定监听端口
-P, --pid-file= 指定进程ID写入位置
-r, --protocol= 加载协议模块
-q, --queue-type= 指定持久化队列
-t, --threads= 使用的I/9线程数量。默认为0
-u, --user= 启动后,切换到指定用户
-v, --verbose 增加一级详细程度
-V, --version 显示版本信息
3.监控
#watch -n 1 "(echo status; sleep 0.1) | nc 127.0.0.1 4730"
四.安装php-gearman
1.wget http://pecl.php.NET/get/gearman-1.1.1.tgz
2.解压
3.#/usr/local/php/bin/phpize
4.#./configure --with-gearman=/usr/local/gearmand/ --with-php-config=/usr/local/php/bin/php-config
5.make && make install
6.在php.ini中加入
extension=gearman.so
7.用#php -i | grep gearman或者php -m | grep gearman来验证
五.安装lib_mysqludf_json 和 gearman-mysql-udf
1.安装lib_mysqludf_json
- wget https://github.com/mysqludf/lib_mysqludf_json/archive/master.zip
- mv master master.zip
- unzip master.zip
- cd lib_mysqludf_json-master
- rm -rf lib_mysqludf_json.so
- gcc $(/usr/local/mysql56-server/bin/mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
2.拷贝lib_mysqludf_json.so到mysql的plugin目录下
3.安装gearman-mysql-udf
- wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-mysql-udf-0.6.tar.gz
- tar xf gearman-mysql-udf-0.6.tar.gz -C ./
- cd gearman-mysql-udf-0.6
- ./configure --with-mysql=/usr/local/mysql56-server/bin/mysql_config --libdir=/usr/local/mysql56-server/lib/plugin/
- make && make install
报错:
configure: error: At least version 0.33 of libgearman is required for gearman-mysql-udf
找不到libgearman,指定路径,加入--with-libgearman-prefix
- ./configure --with-mysql=/usr/local/mysql56-server/bin/mysql_config --libdir=/usr/local/mysql56-server/lib/plugin/ --with-libgearman-prefix=/usr/local/gearmand
六.创建function
- mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
- mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
- mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
七.在mysql中设置Gearman Server
1.
- SELECT gman_servers_set('127.0.0.1:4730');
2.建立一个触发器(更新记录时将数据更新到redis)
- CREATE TRIGGER `test_mysql_redis` AFTER UPDATE ON `test` FOR EACH ROW SET @ret=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
八.查看job及更新数据到redis
1.
- watch -n 1 "(echo status; sleep 0.1) | nc 127.0.0.1 4730"
syncToRedis 1 0 0
syncToRedis后面三列的意思是:
1个正在运行的job, 队列为空, 0个可用的woker
2.编写worker, gearman_workder.php
- <?php
- $worker = new GearmanWorker();
- $worker->addServer();
- $worker->addFunction('syncToRedis', 'syncToRedis');
- $redis = new Redis();
- $redis->connect('127.0.0.1', '6379');
- $redis->select(9);
- 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, $workString);
- }
然后运行gearman_workder.php,去redis中验证,看数据是否有同步.
利用gearman同步mysql数据到redis的更多相关文章
- 快速同步mysql数据到redis中
MYSQL快速同步数据到Redis 举例场景:存储游戏玩家的任务数据,游戏服务器启动时将mysql中玩家的数据同步到redis中. 从MySQL中将数据导入到Redis的Hash结构中.当然,最直接的 ...
- 推荐一个同步Mysql数据到Elasticsearch的工具
把Mysql的数据同步到Elasticsearch是个很常见的需求,但在Github里找到的同步工具用起来或多或少都有些别扭. 例如:某记录内容为"aaa|bbb|ccc",将其按 ...
- Hadoop 中利用 mapreduce 读写 mysql 数据
Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...
- 使用Logstash来实时同步MySQL数据到ES
上篇讲到了ES和Head插件的环境搭建和配置,也简单模拟了数据作测试 本篇我们来实战从MYSQL里直接同步数据 一.首先下载和你的ES对应的logstash版本,本篇我们使用的都是6.1.1 下载后使 ...
- 使用logstash同步MySQL数据到ES
使用logstash同步MySQL数据到ES 版权声明:[分享也是一种提高]个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的. https:// ...
- Logstash使用jdbc_input同步Mysql数据时遇到的空时间SQLException问题
今天在使用Logstash的jdbc_input插件同步Mysql数据时,本来应该能搜索出10条数据,结果在Elasticsearch中只看到了4条,终端中只给出了如下信息 [2017-08-25T1 ...
- centos7配置Logstash同步Mysql数据到Elasticsearch
Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中.个人认为这款插件是比较稳定,容易配置的使用Logstash之前,我们得明确 ...
- Elasticsearch--Logstash定时同步MySQL数据到Elasticsearch
新地址体验:http://www.zhouhong.icu/post/139 一.Logstash介绍 Logstash是elastic技术栈中的一个技术.它是一个数据采集引擎,可以从数据库采集数据到 ...
- 同步mysql数据到ElasticSearch的最佳实践
Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据.ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全 ...
随机推荐
- 百度之星复赛T5&&hdu6148
Problem Description 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Number,像山谷一样的数字. 当一个数字,从左到右依次看过去数字没有出现先递增接着递 ...
- parallel programming. this causual litery nots represents my recent progress in parallel programming in c#.It`s interesting.
not to say extra words,let`s start the code. pasted below: using System; using System.Collections.Ge ...
- 【IDEA】IDEA中更新Maven的索引与像Eclipse那样搜索坐标
1.添加坐标,像Eclipse那样搜索: 右击项目中pom.xml中,然后选择Generate(快捷键是Alt+Insert)->Dependency之后输入关键字查询 或者在pom.xml中直 ...
- STM in Haskell
Software Transactional Memory,软件事务内存管理(应该是这么翻译的吧T_T) 类似于数据库的事务,所有的操作都有log,最后验证其他线程是否对数据进行修改,要是有那么就回滚 ...
- Nginx整合PHP原理
安装Nginx 在网上,看到不少人装Nginx 时非常麻烦,配置时用了一大堆选项,请问你们真实现那么多功能么?害的我越看越郁闷.此次安装Nginx如果是按着上面笔者的步骤一步步走下来,安 ...
- 【linux高级程序设计】(第十二章)Linux多线程编程 3
条件变量通信机制 条件变量必须配合互斥锁一起实现对资源的互斥访问 使用方法: int pthread_cond_init (pthread_cond_t *__restrict __cond, __c ...
- [UML] Use Case 是什么
虽然每个人使用系统的场景有所差异,但是若用户的目标是相同的,则其场景会极为类似.那么这些类似的场景的集合就是类,这种类就称为Use Case.其实例就是场景
- 51nod 1433 0和5【数论/九余定理】
1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 小K手中有n张牌,每张牌上有一个一位数的数,这个 ...
- 用SparkSQL构建用户画像
用SparkSQL构建用户画像 二. 前言 大数据时代已经到来,企业迫切希望从已经积累的数据中分析出有价值的东西,而用户行为的分析尤为重要. 利用大数据来分析用户的行为与消费习惯,可以预测商品的发展 ...
- Codeforces 1037F. Maximum Reduction
总感觉我这种做法会T,一直没写,看了其他人的题解也是这样,,,就果断写了,,可能数据不太深,或者玄学复杂度 题意即求xk-1长度的所有区间的最大值的和,对每一个i(数组下边),他对答案的贡献数量就是在 ...