• Canal实现Redis缓存实时更新(二)


    在上一篇中介绍了Canal的安装和简单配置,本篇介绍与SpringBoot配合实现Redis缓存实时更新

    @CanalEventListener
    public class CanalDataEventListener {
        //SpringCloud组件,若不使用则替换为Service/Controller即可
        @Autowired
        private ContentFeign contentFeign;
        //Redis字符串
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        //自定义数据库的 操作来监听
        //destination = "example"
        @ListenPoint(destination = "example",
                schema = "changgou-content",
                table = {"tb_content", "tb_content_category"},
                eventType = {
                        CanalEntry.EventType.UPDATE,
                        CanalEntry.EventType.DELETE,
                        CanalEntry.EventType.INSERT})
        public void onEventCustomUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
            System.out.println("Action detected!");
            //1.获取列名 为category_id的值
            String categoryId = getColumnValue(eventType, rowData);
            //2.调用feign 获取该分类下的所有的广告集合
            Result<List<Content>> categoryresut = contentFeign.findByCategory(Long.valueOf(categoryId));
            List<Content> data = categoryresut.getData();
            //3.使用redisTemplate存储到redis中
            stringRedisTemplate.boundValueOps("content_" + categoryId).set(JSON.toJSONString(data));
        }
    
        private String getColumnValue(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
            String categoryId = "";
            //判断 如果是删除  则获取beforlist
            if (eventType == CanalEntry.EventType.DELETE) {
                for (CanalEntry.Column column : rowData.getBeforeColumnsList()) {
                    if (column.getName().equalsIgnoreCase("category_id")) {
                        categoryId = column.getValue();
                        return categoryId;
                    }
                }
            } else {
                //判断 如果是添加 或者是更新 获取afterlist
                for (CanalEntry.Column column : rowData.getAfterColumnsList()) {
                    if (column.getName().equalsIgnoreCase("category_id")) {
                        categoryId = column.getValue();
                        return categoryId;
                    }
                }
            }
            return categoryId;
        }
    }
    
  • 相关阅读:
    【力扣 044】62. 不同路径
    【力扣 040】1143. 最长公共子序列
    【力扣 039】347. 前K个高频元素
    【力扣 047】63. 不同路径 II
    【力扣 038】20. 有效的括号
    【力扣 043】897. 递增顺序查找树
    SAP MM不常用移动类型之325
    SAP RETAIL 初阶之使用事务代码WRFMATCOPY创建商品主数据
    SAP RETAIL初阶之商品主数据门店视图里没有WM数据
    SAP RETAIL初阶之商品主数据WM视图
  • 原文地址:https://www.cnblogs.com/neptuneU/p/13863959.html
Copyright © 2020-2023  润新知