使用Canal解决mysql和redis数据同步问题

本文详细介绍了如何下载Canal的1.15版本,配置MySQL的binlog,修改Canal的配置文件,启动Canal服务,以及在SpringBoot项目中添加相关依赖,配置Redis参数,创建数据实体类,实现数据的序列化,并编写数据同步处理器将数据库变化实时同步到Redis中。
摘要由CSDN通过智能技术生成

1、前往官网下载Canal1.15的版本 

https://objects.githubusercontent.com/

2、数据库修改配置文件,进入【vim etc/my.cnf】修改
log-bin=mysql-bin
server-id=1
binlog-format=ROW
binlog-do-db=metaclassroom-system
binlog-ignore-db=mysql
skip-grant-tables

 3、进入Canal的conf/example/instance.properties,修改配置

 

 4、修改canal 配置文件 conf/canal.properties

【canal.serverMode = tcp】

5、进入canal的bin目录下面启动【./startup.sh】

 6、建一个springboot项目导入下面依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--Canal 依赖-->
        <dependency>
            <groupId>top.javatool</groupId>
            <artifactId>canal-spring-boot-starter</artifactId>
            <version>1.2.1-RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.50</version>
        </dependency>

7、在yaml配置canal地址,以及Redis相关参数

8、编写实体类

@Data
public class Employee {
    private Long id;
    private String username;
}

9、对Redis做配置,实现自动序列化

@Configuration
public class RedisConfig {

    @Resource
    private RedisConnectionFactory factory;


    //使用JSON进行序列化
    @Bean
    public RedisTemplate<Object, Object> redisTemplate() {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(factory);
        //JSON格式序列化
        GenericFastJsonRedisSerializer serializer = new GenericFastJsonRedisSerializer();
        //key的序列化
        redisTemplate.setKeySerializer(serializer);
        //value的序列化
        redisTemplate.setValueSerializer(serializer);
        //hash结构key的虚拟化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //hash结构value的虚拟化
        redisTemplate.setHashValueSerializer(serializer);
        return redisTemplate;
    }

}

10、编写数据同步处理器

@CanalTable("employee")
@Component
@Slf4j
public class EmployeeHandler implements EntryHandler<Employee> {

    //把数据往Redis同步
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;

    @Override
    public void insert(Employee employee) {
        redisTemplate.opsForValue().set("EMP:"+employee.getId(),employee);
    }

    @Override
    public void delete(Employee employee) {
        redisTemplate.delete("EMP:"+employee.getId());
    }

    @Override
    public void update(Employee before, Employee after) {
        redisTemplate.opsForValue().set("EMP:"+after.getId(),after);
    }
}

11、运行代码出现这些信息表示连接数据库成功

 12、下面信息表示canal-client在不断尝试获取数据

 13.查看redis中的数据,有下面信息则成功

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值