Redis如何保证缓存与数据库双写时的数据一致性?

1、先删除缓存再更新数据库 进行更新操作时,先删除缓存,然后更新数据库,后续的请求再次读取时,会从数据库读取后再将新数 据更新到缓存。 存在的问题:删除缓存数据之后,更新数据库完成之前,这个时间段内如果有新的读请求过来,就会从 数据库读取旧数据重新写到缓存中,再次造成不一致,并且后续读的都是旧数据。

2、先更新数据库再删除缓存 进行更新操作时,先更新MySQL,成功之后,删除缓存,后续读取请求时再将新数据回写缓存。 存在的问题:更新MySQL和删除缓存这段时间内,请求读取的还是缓存的旧数据,不过等数据库更新完 成,就会恢复一致,影响相对比较小。

3、异步更新缓存 数据库的更新操作完成后不直接操作缓存,而是把这个操作命令封装成消息扔到消息队列中,然后由 Redis自己去消费更新数据,消息队列可以保证数据操作顺序一致性,确保缓存系统的数据正常。

经验分享 程序员 微信小程序 职场和发展