一.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的更多相关文章

  1. 快速同步mysql数据到redis中

    MYSQL快速同步数据到Redis 举例场景:存储游戏玩家的任务数据,游戏服务器启动时将mysql中玩家的数据同步到redis中. 从MySQL中将数据导入到Redis的Hash结构中.当然,最直接的 ...

  2. 推荐一个同步Mysql数据到Elasticsearch的工具

    把Mysql的数据同步到Elasticsearch是个很常见的需求,但在Github里找到的同步工具用起来或多或少都有些别扭. 例如:某记录内容为"aaa|bbb|ccc",将其按 ...

  3. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  4. 使用Logstash来实时同步MySQL数据到ES

    上篇讲到了ES和Head插件的环境搭建和配置,也简单模拟了数据作测试 本篇我们来实战从MYSQL里直接同步数据 一.首先下载和你的ES对应的logstash版本,本篇我们使用的都是6.1.1 下载后使 ...

  5. 使用logstash同步MySQL数据到ES

    使用logstash同步MySQL数据到ES 版权声明:[分享也是一种提高]个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的. https:// ...

  6. Logstash使用jdbc_input同步Mysql数据时遇到的空时间SQLException问题

    今天在使用Logstash的jdbc_input插件同步Mysql数据时,本来应该能搜索出10条数据,结果在Elasticsearch中只看到了4条,终端中只给出了如下信息 [2017-08-25T1 ...

  7. centos7配置Logstash同步Mysql数据到Elasticsearch

    Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中.个人认为这款插件是比较稳定,容易配置的使用Logstash之前,我们得明确 ...

  8. Elasticsearch--Logstash定时同步MySQL数据到Elasticsearch

    新地址体验:http://www.zhouhong.icu/post/139 一.Logstash介绍 Logstash是elastic技术栈中的一个技术.它是一个数据采集引擎,可以从数据库采集数据到 ...

  9. 同步mysql数据到ElasticSearch的最佳实践

    Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据.ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全 ...

随机推荐

  1. 记录string的妙用

    P1106 删数问题 摘要 --> 题目描述 键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和k,寻找一种方案使得剩下的数字组成的 ...

  2. md5 加解密

    using JGDJWeb.Model; using System; using System.Collections.Generic; using System.IO; using System.L ...

  3. [ CodeVS冲杯之路 ] P3027

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/3027/ 显然是DP题,先按线段的右端点升序排序 设 f[i] 为dp到第 i 个线段时最大的价值 目标状态为 max( ...

  4. js实景题

    测天然气流量的仪器每5分钟向数据库插入一条数据,[{time:18:05,value:222},{time:18:10,value:333},{time:18:15,value:444}....... ...

  5. YYH的积木(NOIP模拟赛Round 6)

    题目描述 YYH手上有n盒积木,每个积木有个重量.现在他想从每盒积木中拿一块积木,放在一起,这一堆积木的重量为每块积木的重量和.现在他想知道重量最少的k种取法的重量分别是多少. 输入输出格式 输入格式 ...

  6. ubuntu软件包管理

    ubuntu安装好了后首先要会下载和管理系统的软件包:ubuntu的软件管理方式是apt-get 安装软件包apt-get harvey@ubuntu:/var/cache/apt$ which ap ...

  7. Ubuntu16.10 +python3.5+Tensorflow 1.1

    1.python版本检查 因为Ubuntu16.10已经默认安装了python2.7 和 3.5,检查python版本, 如果为python2.7,那么就需要我们设置python3.5为默认版本. 查 ...

  8. HDU 6305.RMQ Similar Sequence-笛卡尔树+数学期望 (2018 Multi-University Training Contest 1 1008)

    6305.RMQ Similar Sequence 这个题的意思就是对于A,B两个序列,任意的l,r,如果RMQ(A,l,r)=RMQ(B,l,r),B序列里的数为[0,1]的实数,B的重量为B的所有 ...

  9. 牛客网 牛客练习赛7 B.购物-STL(priority_queue)

    B.购物 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 在遥远的东方,有一家糖果专卖店 这家糖果 ...

  10. Codeforces Round #446 (Div. 2) A. Greed【模拟】

    A. Greed time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...