如何解决Redis 和MySQL的数据不一致

1. 处理读请求和写请求 

redis在启动之后,从数据库加载数据。

在处理读请求时:

不要求强一致性的读请求,直接从redis中读取,要求强一致性的直接从mysql读取。

在处理写请求时:

将数据首先都写到数据库,之后再更新到redis(如果先写redis再写mysql,写入失败事务回滚会造成redis中存在脏数据)。

2.MySQL数据库和Redis处理不同的请求数据类型

MySQL数据库处理实时性数据较好,例如金融数据、交易数据。

Redis处理实时性要求不高的数据较好,例如网站最热贴排行榜、好友列表等。

3.结合实际场景,解决redis和mysql的数据一致性

  • 在并发不高的情况下:读操作优先读取redis,不存在的话就去访问MySQL数据库,并把从数据库中读到的数据写回Redis中;写操作的话,直接写MySQL,成功后再写入Redis(可以在MySQL数据库业务代码中定义CRUD触发器,在触发CRUD操作后写数据到Redis,也可以在Redis端解析mysql的binlog,再做相应的操作)。
  • 在并发高的情况下:读操作和上面一样,写操作是异步写,写入Redis后直接返回,然后定时定期写入MySQL或者用MQ异步将mysql数据同步到redis。

场景一:

问题:当更新数据时,如更新某商品

猜你喜欢

转载自blog.csdn.net/qq_34820803/article/details/105664723