数据库 频道

MySQL到Redis的同步的做法(文末有官方推荐)

  不少人在使用MySQL和Redis上都有误区。比如说MySQL慢,比如count一个1000万级别的数据,然后把它存到Redis中。理由是因为Redis快。其实理解是不对的。

  这是把MySQL等数据库的计算过程说的慢,查询结算结果的快做了一个不公平的比较。好比一个人从小学读到大学毕业,拿到了文凭。用了16年。而现在另外一个只看文凭这张纸,只用1秒。这本身就没有可比性嘛。

  理论上来说把这个结果存在Oracle、PostgreSQL和MySQL中,他的效果也不慢。

  说清楚这个以后,还是要说如果有非常频繁访问的数据,还是应该放在Redis中,毕竟能解放在线交易数据库,就解放一点吧。这里的频繁我指的是这些数据每秒100次以上的场景。毕竟每秒几十次的通过索引点查的请求对关系型数据库来说,这都不叫事(其实每秒几万也问题不大,感兴趣的话看我早期的公众号。毕竟没有Redis之前,日子也不是不能过。)

  但是有了Redis可以让日子过的更好。当然也要考虑万一Redis被击穿后,交易数据库也要用尽全力扛起来一些请求。不能说Redis无法启动,整个业务就瘫痪。

  下面开始说比较原始的数据同步做法。

  在MySQL数据库上建立一个表,并且写入数据。

  编写一个同步脚本。这个在网上也能找到。

  在一个第三方的机器上远程执行MySQL的查询。可以看到写入的数据。然后将这个数据送到Redis中。

  执行如下的命令就可以送到Redis中。然后再redis中查询key的值。

  如果发生变更的话,需要手工执行命令(或者有个定时任务去送)比如再次执行上面的命令(或者有个定时任务去更新)

  这是常规做法,不少开发人员做法都是定时更新的。我以前问他们,那不是不准确嘛?开发说,不重要。

  可见这种有误差在有些系统中不在乎或者在乎也没有好办法。最好的还是OLTP数据库发生变更然后就送到KV数据库中。但是这是异构数据库。同构数据库大家都知道解析日志,比如CDC工具就是这样实现的,代表产品如OGG这种。

  那么关系型数据库到KV数据库有没有方法?

  巧了上次遇到官方原厂的老师,他就讲到了。

  这个是产品介绍:https://redis.com/redis-enterprise/redis-data-integration/

  这个是产品技术文档:https://docs.redis.com/latest/rdi/architecture/

  最近Redis企业版推出了一个新功能,可以通过CDC的方式从RDBMS里面自动把数据变化同步到Redis,直接供应用从redis读取数据,避免了从业务逻辑层面处理数据导入导出的问题。

  redis data integration工具,可以支持从关系数据库同步到redis(ingest模式),也支持从redis自动同步到关系数据库(write behind模式)

  我个人觉得这是功能很不错,不用再像我这样原始的做法去手工同步或者定时同步,也免除了开发自己去同步。关键是,实时!

0
相关文章