当前位置:   article > 正文

如何保证Redis cache与DB数据一致性?_redis同步数据到db

redis同步数据到db

例如:项目中,如果人为修改了一个DB数据,那么就会产生缓存层与DB数据不一致,测试环境我就就直接删缓存了。

比较适合小项目的解决方案:

生产环境一般不非法人为操作数据库。

基于代理数据源方式,判断commit提交成功的情况下,将数据异步的提交到redis中。

因为多线程,大项目会对项目有不小影响,可以用mq异步会更好些。

一、多线程:如果并发上来,采用多线程,线程池满了,会导致项目内存爆掉,或拒绝请求。如果出现这种情况可以存在本地文件中,下次做补偿。

如果人为修改数据库一定会造成数据不一致。

二、mq:插入更新删除的时候,将数据放入mq中,昨晚DB操作后,操作redis.

缺陷:耦合度较高,同步操作在一个业务里。如果操作完db停了,那redis还是会不一致。

解决缺陷:mysql主从复制。通过mysql 的binlog文件。mysql主从

binlog:对mqsql操作的写的请求都会有一个二进制的日志文件。

mysql主从复制业务场景:从只读。一般的云数据库都是主从一套,但是有时间的备份

1.备份mysql数据。

2.读写分离

3.高可用集群

cannal:

 分布式微服务项目不可能保证强一致性,最基本的网络传输也需要时间的,只不过时间很快,像是强一致性。

分布式领域中无法保证强一致性,但是可以保证最终一致性。短暂的数据不一致是允许的,但是最终数据一定一致。

上图还有问题,如果频繁的操作db那么canal监听是单线程的,会造成阻塞增大延迟。

下图这种方法,如果出现db操作过大,可以建立mq消费者集群,但是要注意消息顺序性,mq中有

 此处其实还有一个问题,binlog的json发送过来的写入mq的时候,多个消费者会出现操作的前后顺序混乱,也可以做成一个queue对应一个消费者,用内存队列存储然后操作。

 

部分摘自https://www.cnblogs.com/softidea/p/13718927.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/466958
推荐阅读
相关标签
  

闽ICP备14008679号