canal mysql 实例,阿里MySQL组件canal加Redis使用实例

一,canal配置

1.1 服务端配置

参考资料:https://github.com/alibaba/canal/wiki/QuickStart

1.2 客户端配置

参考资料:https://github.com/xingwenge/canal-php

二,MySQL数据同步到Redis

2.1 Fmt::println($entry)方法修改

public static function println($entry)

{

switch ($entry->getEntryType()) {

case EntryType::TRANSACTIONBEGIN:

case EntryType::TRANSACTIONEND:

return;

break;

}

$rowChange = new RowChange();

$rowChange->mergeFromString($entry->getStoreValue());

$evenType = $rowChange->getEventType();

$header = $entry->getHeader();

echo sprintf("================> binlog[%s : %d],name[%s,%s], eventType: %s", $header->getLogfileName(), $header->getLogfileOffset(), $header->getSchemaName(), $header->getTableName(), $header->getEventType()), PHP_EOL;

echo $rowChange->getSql().PHP_EOL;

/** @var RowData $rowData */

foreach ($rowChange->getRowDatas() as $rowData) {

switch ($evenType) {

case EventType::DELETE:

self::ptColumn($rowData->getBeforeColumns());

break;

case EventType::INSERT:

self::ptColumnInsert($rowData->getAfterColumns(),$header->getTableName());

break;

default:

echo '-------> before', PHP_EOL;

self::ptColumn($rowData->getBeforeColumns());

echo '-------> after', PHP_EOL;

self::ptColumn($rowData->getAfterColumns());

break;

}

}

}

private static function ptColumnInsert($columns,$table) {

$redis = new \Redis();

$redis->connect('', );

$redis->auth('');

/** @var Column $column */

static $key;

foreach ($columns as $column) {

echo sprintf("%s : %s update= %s", $column->getName(), $column->getValue(), var_export($column->getUpdated(), true)), PHP_EOL;

if($table == "community_contents"){

$columnname = $column->getName();

if( $columnname== "community_id"){

//echo "++++++++++++++community_id=".$column->getValue()."+++++++++++++".PHP_EOL;

$redis->hset($key, 'community_id', $column->getValue());

}elseif($columnname == "title"){

//echo "++++++++++++++title=".$column->getValue()."+++++++++++++".PHP_EOL;

$redis->hset($key, 'title', $column->getValue());

}elseif($columnname == "url"){

//echo "++++++++++++++url=".$column->getValue()."+++++++++++++".PHP_EOL;

$redis->hset($key, 'url', $column->getValue());

}elseif($columnname == "id"){

$key = $column->getValue();

}

}

if($table == "community_contents_sub"){

if($column->getName() == "attr"){

$columnname = $column->getValue();

}elseif($column->getName() == "value"){

$value = $column->getValue();

}

if(!empty($columnname)&&!empty($value)){

//echo "++++++++++++++".$columnname."=".$value."+++++++++++++".PHP_EOL;

$redis->hset($key, $columnname, $value);

}

}

}

}

重点是把客户端消费程序做成守护进程。& 之后返回Jobid。disown -h jobid。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值